Enunciado #
Una tienda necesita gestionar las compras realizadas por sus clientes. En cada compra se pueden adquirir uno o más productos, indicando la cantidad comprada de cada uno.
El documento permite elegir los atributos. Para que puedas comparar tu diagrama con la solución del challenge, usaremos los siguientes datos.
Datos que debes almacenar #
- Cliente:
id_cliente(entero, identificador),nombre(texto) yemail(texto). - Producto:
id_producto(entero, identificador),nombre(texto) yprecio(decimal; precio actual de venta). - Compra:
id_compra(entero, identificador),fecha(fechahora) yid_cliente(entero). - DetalleCompra:
id_compra(entero),id_producto(entero),cantidad(entero) yprecio_unitario(decimal; precio de venta en el momento de la compra).
Reglas del negocio #
- Un cliente puede realizar varias compras y cada compra pertenece a un único cliente.
- Una compra contiene uno o más productos y un producto puede aparecer en varias compras: la relación es N:N.
- Cada producto aparece una sola vez por compra; si se adquieren varias unidades, se incrementa su cantidad. Usa
(id_compra, id_producto)como PK compuesta deDetalleCompra. - La cantidad debe ser mayor que cero y los precios no pueden ser negativos.
- El precio unitario de una línea se conserva aunque cambie el precio actual del producto. El total se calcula sumando
cantidad × precio_unitariode sus líneas y no se almacena en otra columna.
Diseña las cuatro tablas y sus conexiones. La existencia de al menos una línea por compra y la validación de cantidades y precios se controlarían al implementar la base de datos.
Criterios para el challenge #
Conserva los nombres de tablas y campos indicados; los nombres de campos están escritos sin tildes y con guiones bajos. Los tipos entre paréntesis corresponden a las opciones del editor. Todos los campos son obligatorios (NN), salvo los marcados como opcionales; marca las claves primarias (PK), foráneas (FK) y las restricciones de unicidad que se deducen de las reglas.
Para esta práctica, deja desactivados autoincremento, clave alternativa e índice, y deja vacíos CHECK, valor por defecto y las acciones ON DELETE y ON UPDATE. Representa las relaciones con los extremos 1 y n, o 1 y 1; la opcionalidad de una FK se indica con NN desmarcado. Las reglas que afectan a varias filas, los rangos de valores y los catálogos de valores se razonan aparte: no se comprueban solo con las conexiones del diagrama.