🏗️ Arquitectura del Sistema
📋 Caso de Uso: Sistema de Inventario
Creación de un sistema completo para gestionar productos, proveedores y países con todas las relaciones e integridad referencial.
🔗 Modelo de Relaciones
PAÍSES
→
PROVEEDORES
→
PRODUCTOS
Relaciones: País (1) → Proveedores (N) → Productos (N)
💡 Decisiones de Diseño
- Almacenamiento en columnas: Optimizado para análisis de inventario
- Identificadores INTEGER: Estándar robusto para la mayoría de casos
- Campos Unicode (NCHAR): Soporte internacional para nombres
- Normalización: Tabla separada para países evita duplicación
- Integridad referencial: Garantiza consistencia de datos
📁 Implementación con Ficheros
🔧 Proceso de Creación
- Crear carpeta "ejercicios_sql" para organizar el proyecto
- Crear archivos .hdbtable para cada tabla (productos, proveedores, países)
- Crear archivos .hdbconstraint para relaciones entre tablas
- Construir en orden correcto (dependencias primero)
- Insertar datos de prueba respetando integridad referencial
⚠️ Diferencias con SQL Directo
- No usar la palabra
CREATEen ficheros .hdbtable - Las claves foráneas requieren ficheros .hdbconstraint separados
- Respetar namespace completo con comillas dobles
- El sistema maneja automáticamente el orden de construcción
🗂️ Estructura de las Tablas
🏢 PAÍSES
- id_pais INTEGER PRIMARY KEY
- nombre NCHAR(30) NOT NULL UNIQUE
Propósito: Catálogo de países para normalizar datos
🏭 PROVEEDORES
- id_proveedor INTEGER PRIMARY KEY
- nombre NCHAR(50) NOT NULL UNIQUE
- id_pais INTEGER FOREIGN KEY
Relación: N proveedores por país
📦 PRODUCTOS
- id_producto INTEGER PRIMARY KEY
- nombre NCHAR(50) NOT NULL UNIQUE
- cantidad INTEGER
- precio_compra DECIMAL(6,2) DEFAULT 0.0
- id_proveedor INTEGER FOREIGN KEY
Características: Control de stock y precios
💾 Ejemplo de Fichero .hdbtable
COLUMN TABLE "BBDD_MODELADO"."DB"."EJERCICIOS_SQL"::"EJE_PRODUCTOS" (
id_producto INTEGER PRIMARY KEY,
nombre NCHAR(50) NOT NULL UNIQUE,
cantidad INTEGER,
precio_compra DECIMAL(6,2) DEFAULT 0.0,
id_proveedor INTEGER
);
🔗 Ejemplo de Fichero .hdbconstraint
CONSTRAINT "BBDD_MODELADO"."DB"."EJERCICIOS_SQL"::"FK_PROVEEDORES"
ON "BBDD_MODELADO"."DB"."EJERCICIOS_SQL"::"EJE_PRODUCTOS"
(id_proveedor)
REFERENCES "BBDD_MODELADO"."DB"."EJERCICIOS_SQL"::"EJE_PROVEEDORES"
(id_proveedor)
ON DELETE CASCADE;
🔧 Características Implementadas
✅ Restricciones Aplicadas
- PRIMARY KEY: Identificadores únicos en todas las tablas
- FOREIGN KEY: Relaciones entre países→proveedores→productos
- NOT NULL: Campos obligatorios como nombres
- UNIQUE: Evita duplicación de nombres de productos y proveedores
- DEFAULT: Valor por defecto 0.0 para precios sin especificar
🎯 Acciones Referenciales Configuradas
- Países → Proveedores: ON DELETE SET NULL
- Proveedores → Productos: ON DELETE CASCADE
Lógica: Si se elimina un país, los proveedores quedan sin país asignado. Si se elimina un proveedor, todos sus productos se eliminan automáticamente.
📊 Datos de Prueba
🌍 Países
| ID | Nombre |
|---|---|
| 1 | España |
| 2 | Rusia |
| 3 | Alemania |
🏭 Proveedores
| ID | Nombre | País |
|---|---|---|
| 1 | Proveedor 1 | 1 (España) |
| 2 | Proveedor 2 | 2 (Rusia) |
| 3 | Proveedor 3 | 3 (Alemania) |
📦 Productos (Muestra)
| ID | Nombre | Cantidad | Precio | Proveedor |
|---|---|---|---|---|
| 1 | Llave inglesa | 100 | 50.56 | 1 |
| 2 | Destornillador | 205 | 3.50 | 1 |
| 3 | Tubería de cobre | 50 | 3.75 | 2 |
| 4 | Codos de cobre | 75 | 4.75 | 2 |
🔍 Validación del Sistema
🔍 Verificación en Database Explorer
- Orientación de columnas: Línea vertical azul indica COLUMN TABLE
- Campos y tipos: Verificar estructura completa de cada tabla
- Índices automáticos: PRIMARY KEY y UNIQUE generan índices
- Propiedades: Tamaño en disco y número de registros
⚡ Orden de Inserción Crítico
Secuencia obligatoria:
- Insertar países (tabla padre)
- Insertar proveedores (referencia a países)
- Insertar productos (referencia a proveedores)
Violar este orden causa errores de integridad referencial.
🎯 Mejores Prácticas Aplicadas
- Naming Convention: Mismo nombre para fichero y objeto de BD
- Namespaces Consistentes: Estructura organizativa clara
- Tipos de Datos Apropiados: INTEGER para IDs, NCHAR para textos internacionales
- Restricciones de Integridad: Garantizan calidad de los datos
- Valores por Defecto: Evitan campos NULL en operaciones matemáticas
- Normalización: Tabla separada para países evita redundancia
- Limpieza Regular: Borrar objetos de prueba para mantener orden
🏆 Logros del Ejercicio
Este ejercicio demuestra un dominio completo de:
- Diseño de base de datos normalizada
- Implementación con ficheros SAP HANA
- Restricciones de integridad referencial
- Acciones referenciales apropiadas
- Inserción de datos respetando dependencias