Una tienda online en cuatro tablas
Hasta ahora has trabajado con tablas sueltas. En una aplicación real los datos viven repartidos en varias tablas relacionadas para evitar repeticiones. Modelamos una tienda con cuatro:
clientes (id, nombre, ciudad)
productos (id, nombre, precio)
pedidos (id, cliente_id, fecha)
detalles (id, pedido_id, producto_id, cantidad)
Relaciones (claves foráneas)
Una clave foránea es una columna que apunta al id de otra tabla. Así se
conectan las filas entre tablas:
clientes.id ──< pedidos.cliente_id (un cliente tiene muchos pedidos)
pedidos.id ──< detalles.pedido_id (un pedido tiene muchas líneas)
productos.id ──< detalles.producto_id (un producto aparece en muchas líneas)
El símbolo ──< se lee "uno a muchos": un cliente puede tener muchos
pedidos, pero cada pedido pertenece a un solo cliente.
La tabla detalles es la que une pedidos con productos: cada fila es una
línea de pedido ("3 unidades del producto X dentro del pedido Y"). Por eso
guarda cantidad ahí y no en pedidos ni en productos.
¿Por qué tantas tablas?
- El precio vive solo en
productos: si cambia, se cambia en un único sitio. - El nombre del cliente vive solo en
clientes: no se repite en cada pedido. - Cada concepto se guarda una vez y las demás tablas lo referencian por
id.
Esto es normalización: cada dato tiene un único lugar donde es la verdad.