Una empresa dedicada a la venta de zapatos de importación desea organizar y gestionar su información de manera eficiente mediante una base de datos. La empresa realiza compras a diferentes proveedores internacionales, quienes le suministran una variedad de productos clasificados por tipo, marca, modelo, talla y precio. Estos zapatos se almacenan en inventarios ubicados en distintas sucursales, cada una identificada por su dirección, teléfono y capacidad.
Los clientes pueden realizar compras tanto presencialmente como en línea, registrándose con su información personal (nombre, correo, teléfono y dirección). Cada venta se detalla por la fecha, el cliente que la realizó, los productos adquiridos, la cantidad de cada producto y el monto total. Además, la empresa ofrece promociones, por lo que las ventas pueden estar vinculadas a descuentos específicos.
Para optimizar la gestión, los empleados se asignan a las sucursales y desempeñan roles específicos (gerente, vendedor, etc.), con registro de nombre, correo, teléfono y salario. Los gerentes supervisan las actividades de ventas y controlan el inventario de cada sucursal.
Finalmente, la empresa también lleva un registro de los pagos a proveedores por las compras de productos, indicando la fecha del pago, el monto y los productos incluidos en cada transacción.
Elementos clave del modelo Entidad-Relación:
-- -----------------------------------------------------
-- Table marcas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS marcas (
id INT NOT NULL,
nombre VARCHAR(45) NULL,
PRIMARY KEY (id))
;
-- -----------------------------------------------------
-- Table tipos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS tipos (
id INT NOT NULL,
nombre VARCHAR(45) NULL,
fk_subtipo INT NULL,
PRIMARY KEY (id),
INDEX fk_tipos_tipos1_idx (fk_subtipo),
CONSTRAINT fk_tipos_tipos1
FOREIGN KEY (fk_subtipo)
REFERENCES tipos (id));
-- -----------------------------------------------------
-- Table productos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS productos (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(45) NULL,
precio DECIMAL(10,2) NULL,
fk_marca INT NOT NULL,
fk_tipo INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_productos_marcas1_idx (fk_marca),
INDEX fk_productos_tipos1_idx (fk_tipo),
CONSTRAINT fk_productos_marcas1
FOREIGN KEY (fk_marca)
REFERENCES marcas (id),
CONSTRAINT fk_productos_tipos1
FOREIGN KEY (fk_tipo)
REFERENCES tipos (id));
-- -----------------------------------------------------
-- Table proveedores
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS proveedores (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(45) NULL,
PRIMARY KEY (id));
-- -----------------------------------------------------
-- Table sucursales
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS sucursales (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(45) NULL,
direccion VARCHAR(45) NULL,
telefono VARCHAR(45) NULL,
PRIMARY KEY (id));
-- -----------------------------------------------------
-- Table almacenes
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS almacenes (
id INT NOT NULL,
nombre VARCHAR(45) NULL,
fk_sucursal INT NOT NULL,
capacidad INT NULL,
PRIMARY KEY (id),
UNIQUE INDEX fk_almacenes_sucursales1_idx (fk_sucursal) INVISIBLE,
CONSTRAINT fk_almacenes_sucursales1
FOREIGN KEY (fk_sucursal)
REFERENCES sucursales (id));
-- -----------------------------------------------------
-- Table clientes
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS clientes (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(45) NULL,
PRIMARY KEY (id));
-- -----------------------------------------------------
-- Table puestos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS puestos (
id INT NOT NULL,
nombre VARCHAR(45) NULL,
salario DECIMAL(10,2) NULL,
PRIMARY KEY (id));
-- -----------------------------------------------------
-- Table empleados
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS empleados (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(45) NULL,
correo VARCHAR(45) NULL,
telefono VARCHAR(45) NULL,
sucursales_id INT NOT NULL,
puestos_id INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_empleados_sucursales1_idx (sucursales_id),
INDEX fk_empleados_puestos1_idx (puestos_id),
CONSTRAINT fk_empleados_sucursales1
FOREIGN KEY (sucursales_id)
REFERENCES sucursales (id),
CONSTRAINT fk_empleados_puestos1
FOREIGN KEY (puestos_id)
REFERENCES puestos (id));
-- -----------------------------------------------------
-- Table tallas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS tallas (
id INT NOT NULL,
talla VARCHAR(45) NULL,
PRIMARY KEY (id));
-- -----------------------------------------------------
-- Table importar
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS importar (
fk_proveedor INT NOT NULL,
fk_producto INT NOT NULL,
PRIMARY KEY (fk_proveedor, fk_producto),
INDEX fk_proveedores_has_productos_productos1_idx (fk_producto),
INDEX fk_proveedores_has_productos_proveedores_idx (fk_proveedor),
CONSTRAINT fk_proveedores_has_productos_proveedores
FOREIGN KEY (fk_proveedor)
REFERENCES proveedores (id),
CONSTRAINT fk_proveedores_has_productos_productos1
FOREIGN KEY (fk_producto)
REFERENCES productos (id));
-- -----------------------------------------------------
-- Table prod_talla
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS prod_talla (
id INT NOT NULL AUTO_INCREMENT,
fk_producto INT NOT NULL,
fk_talla INT NOT NULL,
fk_almacen INT NOT NULL,
cantidad INT NULL,
PRIMARY KEY (id),
INDEX fk_productos_has_tallas_tallas1_idx (fk_talla),
INDEX fk_productos_has_tallas_productos1_idx (fk_producto),
INDEX fk_prod_stock_almacenes1_idx (fk_almacen),
UNIQUE INDEX mi_inidice (fk_producto, fk_talla, fk_almacen),
CONSTRAINT fk_productos_has_tallas_productos1
FOREIGN KEY (fk_producto)
REFERENCES productos (id),
CONSTRAINT fk_productos_has_tallas_tallas1
FOREIGN KEY (fk_talla)
REFERENCES tallas (id),
CONSTRAINT fk_prod_stock_almacenes1
FOREIGN KEY (fk_almacen)
REFERENCES almacenes (id));
-- -----------------------------------------------------
-- Table factura
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS factura (
id INT NOT NULL AUTO_INCREMENT,
fecha DATE NULL,
fk_cliente INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_factura_clientes1_idx (fk_cliente),
CONSTRAINT fk_factura_clientes1
FOREIGN KEY (fk_cliente)
REFERENCES clientes (id));
-- -----------------------------------------------------
-- Table lineas_fac
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS lineas_fac (
fk_factura INT NOT NULL,
fk_prod INT NOT NULL,
cantidad VARCHAR(45) NULL,
precio DECIMAL(10,2) NULL,
descuento DECIMAL(5,2) NULL,
PRIMARY KEY (fk_factura, fk_prod),
INDEX fk_prod_talla_has_factura_factura1_idx (fk_factura),
INDEX fk_prod_talla_has_factura_prod_talla1_idx (fk_prod),
CONSTRAINT fk_prod_talla_has_factura_prod_talla1
FOREIGN KEY (fk_prod)
REFERENCES prod_talla (id),
CONSTRAINT fk_prod_talla_has_factura_factura1
FOREIGN KEY (fk_factura)
REFERENCES factura (id));