CLASE 053

Ejercicio Práctico: Sistema de Inventario Completo con Ficheros

🎯 Clase Práctica Integral

Objetivo: Aplicar todos los conceptos de CREATE TABLE utilizando el sistema de ficheros de SAP HANA

🏗️ 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

  1. Crear carpeta "ejercicios_sql" para organizar el proyecto
  2. Crear archivos .hdbtable para cada tabla (productos, proveedores, países)
  3. Crear archivos .hdbconstraint para relaciones entre tablas
  4. Construir en orden correcto (dependencias primero)
  5. Insertar datos de prueba respetando integridad referencial

⚠️ Diferencias con SQL Directo

  • No usar la palabra CREATE en 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

IDNombre
1España
2Rusia
3Alemania

🏭 Proveedores

IDNombrePaís
1Proveedor 11 (España)
2Proveedor 22 (Rusia)
3Proveedor 33 (Alemania)

📦 Productos (Muestra)

IDNombreCantidadPrecioProveedor
1Llave inglesa10050.561
2Destornillador2053.501
3Tubería de cobre503.752
4Codos de cobre754.752

🔍 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:

  1. Insertar países (tabla padre)
  2. Insertar proveedores (referencia a países)
  3. 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