-- Proyecto Final: Sistema de Venta de Ropa
-- Script de Creación de la Base de Datos
-- Creación de la Base de Datos
CREATE DATABASE SistemaVentaRopa;
USE SistemaVentaRopa;
-- Tabla Cliente
CREATE TABLE Cliente (
ClienteID INT AUTO_INCREMENT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Telefono VARCHAR(15),
FechaRegistro DATE DEFAULT CURRENT_DATE
);
-- Tabla Producto
CREATE TABLE Producto (
ProductoID INT AUTO_INCREMENT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Precio DECIMAL(10, 2) NOT NULL,
Categoria VARCHAR(50),
Stock INT NOT NULL DEFAULT 0
);
-- Tabla Proveedor
CREATE TABLE Proveedor (
ProveedorID INT AUTO_INCREMENT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Contacto VARCHAR(100),
Telefono VARCHAR(15)
);
-- Tabla Orden
CREATE TABLE Orden (
OrdenID INT AUTO_INCREMENT PRIMARY KEY,
ClienteID INT NOT NULL,
FechaOrden DATE DEFAULT CURRENT_DATE,
Total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID) ON DELETE CASCADE
);
-- Tabla Detalle_Orden
CREATE TABLE Detalle_Orden (
DetalleID INT AUTO_INCREMENT PRIMARY KEY,
OrdenID INT NOT NULL,
ProductoID INT NOT NULL,
Cantidad INT NOT NULL,
PrecioUnitario DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (OrdenID) REFERENCES Orden(OrdenID) ON DELETE CASCADE,
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
);
-- Tabla Inventario
CREATE TABLE Inventario (
InventarioID INT AUTO_INCREMENT PRIMARY KEY,
ProductoID INT NOT NULL,
Cantidad INT NOT NULL,
FechaActualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
);
-- Vistas
CREATE VIEW Ventas_por_Cliente AS
SELECT c.Nombre AS Cliente, SUM(o.Total) AS Total_Ventas
FROM Cliente c
JOIN Orden o ON c.ClienteID = o.ClienteID
GROUP BY c.Nombre;
CREATE VIEW Inventario_Disponible AS
SELECT p.Nombre AS Producto, i.Cantidad AS Stock
FROM Producto p
JOIN Inventario i ON p.ProductoID = i.ProductoID;
-- Funciones
DELIMITER //
CREATE FUNCTION Calcular_Descuento(Monto DECIMAL(10, 2), Porcentaje INT)
RETURNS DECIMAL(10, 2)
DETERMINISTIC
BEGIN
RETURN Monto - (Monto * Porcentaje / 100);
END;//
CREATE FUNCTION Obtener_Stock_Producto(ProductoID INT)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE Stock INT;
SELECT Cantidad INTO Stock FROM Inventario WHERE ProductoID = ProductoID;
RETURN Stock;
END;//
DELIMITER ;
-- Procedimientos Almacenados
DELIMITER //
CREATE PROCEDURE Registrar_Orden (
IN ClienteID INT,
IN Total DECIMAL(10, 2),
IN Productos JSON
)
BEGIN
DECLARE NuevaOrdenID INT;
INSERT INTO Orden (ClienteID, Total) VALUES (ClienteID, Total);
SET NuevaOrdenID = LAST_INSERT_ID();
-- Inserción en Detalle_Orden
DECLARE ProductoID INT;
DECLARE Cantidad INT;
DECLARE Precio DECIMAL(10, 2);
DECLARE i INT DEFAULT 0;
WHILE i < JSON_LENGTH(Productos) DO
SET ProductoID = JSON_EXTRACT(Productos, CONCAT('$[', i, '].ProductoID'));
SET Cantidad = JSON_EXTRACT(Productos, CONCAT('$[', i, '].Cantidad'));
SET Precio = JSON_EXTRACT(Productos, CONCAT('$[', i, '].Precio'));
INSERT INTO Detalle_Orden (OrdenID, ProductoID, Cantidad, PrecioUnitario)
VALUES (NuevaOrdenID, ProductoID, Cantidad, Precio);
UPDATE Inventario
SET Cantidad = Cantidad - Cantidad
WHERE ProductoID = ProductoID;
SET i = i + 1;
END WHILE;
END;//
CREATE PROCEDURE Actualizar_Stock (
IN ProductoID INT,
IN Cantidad INT
)
BEGIN
UPDATE Inventario
SET Cantidad = Cantidad + Cantidad
WHERE ProductoID = ProductoID;
END;//
DELIMITER ;
To embed this project on your website, copy the following code and paste it into your website's HTML: