Uma loja online em quatro tabelas
Até agora você trabalhou com tabelas isoladas. Em uma aplicação real os dados vivem distribuídos em várias tabelas relacionadas para evitar repetições. Modelamos uma loja com quatro:
clientes (id, nome, cidade)
produtos (id, nome, preco)
pedidos (id, cliente_id, data)
detalhes (id, pedido_id, produto_id, quantidade)
Relações (chaves estrangeiras)
Uma chave estrangeira é uma coluna que aponta para o id de outra tabela.
É assim que as linhas se conectam entre tabelas:
clientes.id ──< pedidos.cliente_id (um cliente tem muitos pedidos)
pedidos.id ──< detalhes.pedido_id (um pedido tem muitas linhas)
produtos.id ──< detalhes.produto_id (um produto aparece em muitas linhas)
O símbolo ──< se lê "um para muitos": um cliente pode ter muitos
pedidos, mas cada pedido pertence a um único cliente.
A tabela detalhes é a que une pedidos com produtos: cada linha é uma
linha de pedido ("3 unidades do produto X dentro do pedido Y"). Por isso
ela guarda quantidade ali e não em pedidos nem em produtos.
Por que tantas tabelas?
- O preço vive somente em
produtos: se mudar, muda-se em um único lugar. - O nome do cliente vive somente em
clientes: não se repete em cada pedido. - Cada conceito é guardado uma vez e as demais tabelas o referenciam por
id.
Isso é normalização: cada dado tem um único lugar onde é a verdade.