Ir al contenido
wannacode

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

  • PKidinteger
  • nametext *
  • emailtext *
  • citytext
  • joined_attext *

categories

  • PKidinteger
  • nametext *
  • FKparent_idinteger→ categories

products

  • PKidinteger
  • nametext *
  • FKcategory_idinteger→ categories
  • pricereal *
  • stockinteger *
  • added_attext *

orders

  • PKidinteger
  • FKcustomer_idinteger *→ customers
  • ordered_attext *
  • statustext *

order_items

  • PKorder_idinteger→ orders
  • PKproduct_idinteger→ products
  • quantityinteger *
  • unit_pricereal *

reviews

  • PKidinteger
  • FKproduct_idinteger *→ products
  • FKcustomer_idinteger *→ customers
  • ratinginteger *
  • bodytext
  • created_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:

SQLbase de datos: tienda

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:

SQLbase de datos: tienda

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?

1. La reseña 3 es del producto 17. ¿Qué producto es? (Ejecuta arriba los productos y busca el id 17.)

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?

SQLbase de datos: tienda

Test

Ponte a prueba

1. ¿Cuántas veces está guardado en la base el nombre del producto 1, «Pan blanco»?
2. ¿Por qué order_items guarda unit_price en lugar de tomar el precio de products?
3. El pedido 60 tiene dos filas en order_items. ¿Qué significa?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·