-- Creación de la base de datos
CREATE DATABASE SistemaVentasRopa;
USE SistemaVentasRopa;
-- Tabla Cliente
CREATE TABLE Cliente (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
telefono VARCHAR(15),
direccion TEXT
);
-- Tabla Producto
CREATE TABLE Producto (
id_producto INT AUTO_INCREMENT PRIMARY KEY,
nombre_producto VARCHAR(100) NOT NULL,
descripcion TEXT,
precio DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL
);
-- Tabla Proveedor
CREATE TABLE Proveedor (
id_proveedor INT AUTO_INCREMENT PRIMARY KEY,
nombre_proveedor VARCHAR(100) NOT NULL,
contacto VARCHAR(100),
telefono VARCHAR(15),
email VARCHAR(100)
);
-- Tabla Orden
CREATE TABLE Orden (
id_orden INT AUTO_INCREMENT PRIMARY KEY,
id_cliente INT NOT NULL,
fecha_orden DATE NOT NULL,
total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (id_cliente) REFERENCES Cliente(id_cliente)
);
-- Tabla Detalle_Orden
CREATE TABLE Detalle_Orden (
id_detalle INT AUTO_INCREMENT PRIMARY KEY,
id_orden INT NOT NULL,
id_producto INT NOT NULL,
cantidad INT NOT NULL,
subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (id_orden) REFERENCES Orden(id_orden),
FOREIGN KEY (id_producto) REFERENCES Producto(id_producto)
);
-- Tabla Inventario
CREATE TABLE Inventario (
id_inventario INT AUTO_INCREMENT PRIMARY KEY,
id_producto INT NOT NULL,
cantidad INT NOT NULL,
FOREIGN KEY (id_producto) REFERENCES Producto(id_producto)
);
-- Script de inserción de datos
INSERT INTO Cliente (id_cliente, nombre, email) VALUES (1, 'Juan Perez', 'juan.perez@gmail.com');
INSERT INTO Producto (id_producto, nombre, precio) VALUES (1, 'Camisa', 25.00);
INSERT INTO Orden (id_orden, id_cliente, fecha) VALUES (1, 1, '2024-12-20');
INSERT INTO Detalle_Orden (id_detalle, id_orden, id_producto, cantidad) VALUES (1, 1, 1, 2);
INSERT INTO Proveedor (id_proveedor, nombre, contacto) VALUES (1, 'Proveedor1', 'contacto@proveedor1.com');
INSERT INTO Inventario (id_producto, stock) VALUES (1, 100);
-- Script de creación de Vistas
CREATE VIEW Ventas_por_Cliente AS
SELECT c.nombre AS Cliente, SUM(d.cantidad * p.precio) AS Total_Ventas
FROM Cliente c
JOIN Orden o ON c.id_cliente = o.id_cliente
JOIN Detalle_Orden d ON o.id_orden = d.id_orden
JOIN Producto p ON d.id_producto = p.id_producto
GROUP BY c.nombre;
CREATE VIEW Inventario_Disponible AS
SELECT p.nombre AS Producto, i.stock AS Stock_Disponible
FROM Producto p
JOIN Inventario i ON p.id_producto = i.id_producto;
-- Script de creación de Funciones
CREATE FUNCTION Calcular_Descuento(monto DECIMAL(10,2), porcentaje DECIMAL(5,2)) RETURNS DECIMAL(10,2)
BEGIN
RETURN monto - (monto * porcentaje / 100);
END;
CREATE FUNCTION Obtener_Stock_Producto(id INT) RETURNS INT
BEGIN
DECLARE stock INT;
SELECT i.stock INTO stock FROM Inventario i WHERE i.id_producto = id;
RETURN stock;
END;
-- Script de creación de Stored Procedures
CREATE PROCEDURE Registrar_Orden (
IN id_cliente INT, IN fecha DATE, IN productos JSON
)
BEGIN
DECLARE id_orden INT;
INSERT INTO Orden (id_cliente, fecha) VALUES (id_cliente, fecha);
SET id_orden = LAST_INSERT_ID();
INSERT INTO Detalle_Orden (id_orden, id_producto, cantidad)
SELECT id_orden, JSON_UNQUOTE(JSON_EXTRACT(producto, '$.id_producto')),
JSON_UNQUOTE(JSON_EXTRACT(producto, '$.cantidad'))
FROM JSON_TABLE(productos, '$[*]' COLUMNS (producto JSON PATH '$'));
END;
CREATE PROCEDURE Actualizar_Stock (
IN id_producto INT, IN cantidad INT
)
BEGIN
UPDATE Inventario SET stock = stock - cantidad WHERE id_producto = id_producto;
END;
-- Script de creación de Triggers
CREATE TRIGGER Actualizar_Inventario_After_Orden
AFTER INSERT ON Detalle_Orden
FOR EACH ROW
BEGIN
UPDATE Inventario
SET stock = stock - NEW.cantidad
WHERE id_producto = NEW.id_producto;
END;
To embed this project on your website, copy the following code and paste it into your website's HTML: