Este repositorio contiene una versión modificada de la base de datos Northwind para PostgreSQL, desarrollada como proyecto de curso con nuevas funcionalidades y mejoras.
La base de datos Northwind ha sido extendida con las siguientes mejoras:
-
Atributos dinámicos en productos (JSON):
- Se añadió una columna JSON (
caracteristicas_json) a la tablaProductspara almacenar atributos dinámicos - Ejemplo de datos almacenados: categoría, subcategoría, especificaciones (tamaño, material, ingredientes, etc.)
- Consultas SQL para extraer información del campo JSON
- Se añadió una columna JSON (
-
Descuentos por volumen:
- Nueva tabla
volume_discountsque define descuentos basados en cantidades mínimas compradas de un producto - Vista
analisis_volumen_descuentoque muestra análisis detallados de los descuentos
- Nueva tabla
-
Sistema de Categorías Jerárquicas: Subcategorías para mejor organización de productos
- PostgreSQL 12+
- pgAdmin (opcional, para gestión gráfica)
- Cliente psql (para línea de comandos)
- PostgreSQL 12 o superior instalado
- Acceso a la línea de comandos (para usar
psql) o a pgAdmin
-
Clonar el repositorio:
git clone https://github.com/tu-usuario/northwind-postgres-modificado.git cd northwind-postgres-modificado -
Crear la base de datos:
createdb northwind_curso
-
Restaurar el dump:
psql -d northwind_curso -f northwind_modificado.sql
Después de restaurar, ejecuta estas consultas para verificar:
-- Verificar la columna JSON en Products
SELECT product_id, product_name, caracteristicas_json
FROM Products
WHERE caracteristicas_json IS NOT NULL;
-- Verificar la tabla de descuentos por volumen
SELECT * FROM volume_discounts;
-- Probar la vista de análisis de descuentos
SELECT * FROM analisis_volumen_descuento;Modificación de la tabla Products:
ALTER TABLE Products
ADD COLUMN caracteristicas_json JSON;Ejemplo de actualización de datos JSON:
UPDATE Products SET caracteristicas_json = '{
"categoria": "Bebidas",
"subcategoria": "Calientes",
"especificaciones": {
"tamano": "500 ml",
"material": "Vidrio",
"ingredientes": ["Té", "Especias"]
}
}' WHERE product_id = 1;Consultas sobre datos JSON:
SELECT
caracteristicas_json->>'categoria' AS Categoria,
caracteristicas_json->>'subcategoria' AS Subcategoria,
caracteristicas_json->'especificaciones'->>'tamano' AS Tamaño
FROM Products
WHERE caracteristicas_json IS NOT NULL;Creación de tabla:
CREATE TABLE volume_discounts (
discount_id INT PRIMARY KEY,
product_id INT NOT NULL,
MinQuantity INT NOT NULL,
Discount DECIMAL(4,2) NOT NULL CHECK (Discount BETWEEN 0 AND 1),
FOREIGN KEY (product_id) REFERENCES Products(product_id)
);Vista de análisis:
CREATE VIEW analisis_volumen_descuento AS
SELECT
vd.discount_id,
vd.product_id,
p.product_name,
p.unit_price,
vd.MinQuantity,
vd.Discount AS DiscountRate,
ROUND((p.unit_price * (1 - vd.Discount))::NUMERIC, 2) AS DiscountedPrice,
ROUND((p.unit_price * vd.Discount)::NUMERIC, 2) AS SavingsPerUnit,
(vd.MinQuantity * p.unit_price) AS OriginalBatchPrice,
ROUND((vd.MinQuantity * p.unit_price * (1 - vd.Discount))::NUMERIC, 2) AS DiscountedBatchPrice,
ROUND((vd.MinQuantity * p.unit_price * vd.Discount)::NUMERIC, 2) AS TotalSavings
FROM volume_discounts vd
JOIN Products p ON vd.product_id = p.product_id;Si tienes problemas con la instalación:
- Verifica que PostgreSQL esté corriendo (
sudo service postgresql status) - Asegúrate de tener permisos para crear bases de datos
- Revisa que el archivo
northwind_modificado.sqlesté completo - Consulta los logs de PostgreSQL para errores detallados
Nota: Esta versión modificada de Northwind demuestra implementaciones avanzadas de PostgreSQL como campos JSON, vistas complejas y estructuras de datos jerárquicas.