La tienda
En resumen: La base de prácticas del curso es una tienda en línea con seis tablas, donde cada línea de pedido apunta a un producto y cada pedido a un cliente.
Problema
¿Quién pidió qué?
La dueña de la tienda pregunta: «¿Qué había en el último pedido y de quién era?»
En Excel habría una sola fila con todo. En la base de datos la respuesta está repartida en tres tablas. Suena a complicación, pero es justo lo contrario. Veamos por qué.
La idea
Seis tablas
La tienda tiene seis tablas. Cada una es para un tipo de cosas:
customers
- PK
idinteger nametext *emailtext *citytextjoined_attext *
categories
- PK
idinteger nametext *- FK
parent_idinteger→ categories
products
- PK
idinteger nametext *- FK
category_idinteger→ categories pricereal *stockinteger *added_attext *
orders
- PK
idinteger - FK
customer_idinteger *→ customers ordered_attext *statustext *
order_items
- PK
order_idinteger→ orders - PK
product_idinteger→ products quantityinteger *unit_pricereal *
reviews
- PK
idinteger - FK
product_idinteger *→ products - FK
customer_idinteger *→ customers ratinginteger *bodytextcreated_attext *
- customers: los clientes. categories: las categorías de los productos. products: los productos, con precio en euros y existencias.
- orders: los pedidos. Un pedido es de un cliente y tiene una fecha y un estado: new, paid, shipped, delivered o cancelled.
- order_items: qué hay en cada pedido. Una fila es un producto en un pedido.
- reviews: las reseñas, con una puntuación de 1 a 5.
PK es la columna por la que se reconoce una fila: el número id. FK es una columna que apunta a una fila de otra tabla. El asterisco significa que la columna no puede estar vacía.
Más precisamente, para curiosos
Los precios son REAL, números con decimales. Las fechas son texto con la forma 2026-10-19: SQLite no tiene un tipo propio para la fecha, y con esta forma el texto se ordena bien. En PostgreSQL y MySQL existen los tipos DATE y NUMERIC, y allí se usan esos. Volveremos a los tipos cuando hagamos tablas propias.
Míralo
El último pedido, fila por fila
El último pedido es el 60. En orders tiene customer_id 1. El cliente 1 en customers es Maria Ivanova.
¿Qué pidió? Las filas del pedido 60 están en order_items. Ejecuta la tabla y baja hasta el final:
Las dos últimas filas son del pedido 60: el producto 1, 2 unidades a 1,20 € cada una, y el producto 19, 4 unidades a 2,90 € cada una. Ahora mira qué productos son el 1 y el 19:
Pan blanco y detergente para platos. La respuesta se armó con tres tablas, y cada hecho está guardado una sola vez: el nombre de Maria, el nombre del pan, su precio.
Más precisamente, para curiosos
Buscar con los ojos entre 152 filas es lento y es fácil equivocarse. En el próximo módulo le dirás a la base «solo las filas del pedido 60», y más adelante juntarás las tres tablas en una sola consulta con JOIN.
Pruébalo
¿De quién es la reseña?
Ejercicio
Las reseñas
Muestra todas las reseñas (tabla reviews). ¿Cuál es la reseña con la puntuación más baja y de qué producto es?
Solución
SELECT * FROM reviews;16 reseñas. La puntuación más baja es 1, en la reseña 13: «El café estaba caducado.» Es del producto 17, el café en grano, y la escribió el cliente 12, Boris.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Por qué una base de datos
- Ejercicios sobre el tema: Bienvenida a las bases de datos