-- =========================================================================
-- 1. CREACIÓN DE TABLAS (MODELO 3NF)
-- =========================================================================
CREATE TABLE CLIENTES (
ID_Cliente INT NOT NULL,
Cliente_Nombre VARCHAR(100) NOT NULL,
Cliente_Email VARCHAR(100) NOT NULL,
Cliente_Direccion VARCHAR(255) NOT NULL,
CONSTRAINT PK_CLIENTES PRIMARY KEY (ID_Cliente),
CONSTRAINT UQ_CLIENTES_EMAIL UNIQUE (Cliente_Email)
);
CREATE TABLE PRODUCTOS (
ID_Producto INT NOT NULL,
Nombre_Producto VARCHAR(100) NOT NULL,
Precio_Unitario DECIMAL(10,2) NOT NULL,
CONSTRAINT PK_PRODUCTOS PRIMARY KEY (ID_Producto)
);
CREATE TABLE SOLICITUDES_COMPRA (
ID_Solicitud INT NOT NULL,
ID_Cliente INT NOT NULL,
Total_Pago DECIMAL(10,2) NOT NULL,
CONSTRAINT PK_SOLICITUDES_COMPRA PRIMARY KEY (ID_Solicitud),
CONSTRAINT FK_SOLICITUDES_CLIENTE FOREIGN KEY (ID_Cliente) REFERENCES CLIENTES (ID_Cliente)
);
CREATE TABLE DETALLES_SOLICITUD (
ID_Solicitud INT NOT NULL,
ID_Producto INT NOT NULL,
Cantidad INT NOT NULL,
Precio_Historico DECIMAL(10,2) NOT NULL,
CONSTRAINT PK_DETALLES_SOLICITUD PRIMARY KEY (ID_Solicitud, ID_Producto),
CONSTRAINT FK_DETALLES_SOLICITUD_CABECERA FOREIGN KEY (ID_Solicitud) REFERENCES SOLICITUDES_COMPRA (ID_Solicitud) ON DELETE CASCADE,
CONSTRAINT FK_DETALLES_SOLICITUD_PRODUCTO FOREIGN KEY (ID_Producto) REFERENCES PRODUCTOS (ID_Producto)
);
-- =========================================================================
-- 2. INSERCIÓN DE DATOS REALES DEL PROBLEMA
-- =========================================================================
-- Inserción de los clientes únicos del problema (Ana Gómez y Carlos Ruiz)
INSERT INTO CLIENTES (ID_Cliente, Cliente_Nombre, Cliente_Email, Cliente_Direccion) VALUES
(1, 'Ana Gómez', 'ana@email.com', 'Av. Corrientes 123'),
(2, 'Carlos Ruiz', 'carlos@email.com', 'Calle Falsa 456');
-- Catálogo desglosado de forma atómica a partir de las cadenas de texto originales
INSERT INTO PRODUCTOS (ID_Producto, Nombre_Producto, Precio_Unitario) VALUES
(10, 'Laptop', 1350.00),
(11, 'Mouse', 50.00),
(12, 'Teclado', 100.00),
(13, 'Monitor', 300.00),
(14, 'Impresora', 350.00),
(15, 'Tinta', 100.00);
-- Cabeceras de las Solicitudes con sus IDs y Totales exactos (1001, 1002, 1003)
INSERT INTO SOLICITUDES_COMPRA (ID_Solicitud, ID_Cliente, Total_Pago) VALUES
(1001, 1, 1500.00), -- Primera compra de Ana Gómez
(1002, 1, 300.00), -- Segunda compra de Ana Gómez
(1003, 2, 450.00); -- Única compra de Carlos Ruiz
-- Desglose atómico de cada producto asignado a su orden correspondiente
INSERT INTO DETALLES_SOLICITUD (ID_Solicitud, ID_Producto, Cantidad, Precio_Historico) VALUES
-- Solicitud 1001 (Laptop + Mouse + Teclado = $1500)
(1001, 10, 1, 1350.00),
(1001, 11, 1, 50.00),
(1001, 12, 1, 100.00),
-- Solicitud 1002 (Monitor = $300)
(1002, 13, 1, 300.00),
-- Solicitud 1003 (Impresora + Tinta = $450)
(1003, 14, 1, 350.00),
(1003, 15, 1, 100.00);
-- =========================================================================
-- 3. CONSULTA ANALÍTICA PARA FINANZAS
-- =========================================================================
-- Este SELECT une las tablas para mostrar la información en formato de cuadrícula gráfica limpia
SELECT
sc.ID_Solicitud,
c.Cliente_Nombre,
c.Cliente_Email,
c.Cliente_Direccion,
p.Nombre_Producto,
ds.Cantidad,
ds.Precio_Historico,
sc.Total_Pago
FROM SOLICITUDES_COMPRA sc
JOIN CLIENTES c ON sc.ID_Cliente = c.ID_Cliente
JOIN DETALLES_SOLICITUD ds ON sc.ID_Solicitud = ds.ID_Solicitud
JOIN PRODUCTOS p ON ds.ID_Producto = p.ID_Producto
ORDER BY sc.ID_Solicitud ASC, p.Nombre_Producto ASC;
To embed this project on your website, copy the following code and paste it into your website's HTML: