Contenido del curso
Bases de Datos: De Cero a Experto

Contexto:

Negocio: Tienda que vende productos.
Queremos analizar las ventas por producto, cliente y fecha.


1. Crear tablas de dimensiones

sql
-- Dimensión Producto
CREATE TABLE dim_producto (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
categoria VARCHAR(50),
marca VARCHAR(50)
);

-- Dimensión Cliente
CREATE TABLE dim_cliente (
cliente_id INT PRIMARY KEY,
nombre VARCHAR(100),
region VARCHAR(50),
segmento VARCHAR(50)
);

-- Dimensión Fecha
CREATE TABLE dim_fecha (
fecha_id INT PRIMARY KEY,
dia INT,
mes INT,
año INT,
trimestre INT
);


2. Crear tabla de hechos

sql
CREATE TABLE fact_ventas (
venta_id INT PRIMARY KEY,
fecha_id INT,
producto_id INT,
cliente_id INT,
cantidad INT,
monto DECIMAL(10,2),

FOREIGN KEY (fecha_id) REFERENCES dim_fecha(fecha_id),
FOREIGN KEY (producto_id) REFERENCES dim_producto(producto_id),
FOREIGN KEY (cliente_id) REFERENCES dim_cliente(cliente_id)
);


3. Insertar datos de ejemplo

sql
-- Dimensiones
INSERT INTO dim_producto VALUES
(1, 'Camisa', 'Ropa', 'Marca A'),
(2, 'Pantalón', 'Ropa', 'Marca B');

INSERT INTO dim_cliente VALUES
(1, 'Ana Pérez', 'Norte', 'Regular'),
(2, 'Luis Gómez', 'Sur', 'Premium');

INSERT INTO dim_fecha VALUES
(20230101, 1, 1, 2023, 1),
(20230102, 2, 1, 2023, 1);

-- Hechos
INSERT INTO fact_ventas VALUES
(1, 20230101, 1, 1, 2, 400.00),
(2, 20230102, 2, 2, 1, 300.00);


4. Consulta ejemplo para análisis

sql
SELECT
c.nombre AS cliente,
p.nombre AS producto,
f.año,
SUM(v.cantidad) AS total_cantidad,
SUM(v.monto) AS total_monto
FROM fact_ventas v
JOIN dim_cliente c ON v.cliente_id = c.cliente_id
JOIN dim_producto p ON v.producto_id = p.producto_id
JOIN dim_fecha f ON v.fecha_id = f.fecha_id
GROUP BY c.nombre, p.nombre, f.año
ORDER BY total_monto DESC;

📝 Actividad práctica

  • Añade nuevas filas a las tablas de dimensiones y hechos.

  • Realiza consultas para analizar ventas por región, marca o trimestre.

  • Experimenta creando filtros con WHERE para fechas o segmentos específicos.

Scroll al inicio