CLASE 050

Restricciones a Nivel de Tabla y Claves Foráneas en SAP HANA

🎯 Enfoque: Modelado Avanzado de Bases de Datos

Objetivo: Implementar restricciones a nivel de tabla y establecer relaciones entre entidades

🏗️ Restricciones a Nivel de Tabla

Las restricciones a nivel de tabla permiten aplicar reglas que afectan a múltiples columnas o al conjunto completo de datos de una tabla.

🔑 UNIQUE a Nivel de Tabla

Permite definir restricciones de unicidad sobre múltiples columnas combinadas o individualmente.

  • Combinadas: UNIQUE (campo1, campo2)
  • Individuales: UNIQUE (campo1), UNIQUE (campo2)

🗝️ PRIMARY KEY Compuesta

Establece una clave primaria formada por múltiples campos que juntos identifican unívocamente cada registro.

  • Solo puede existir una clave primaria por tabla
  • Combina automáticamente NOT NULL y UNIQUE

🔗 FOREIGN KEY

Establece relaciones entre tablas, garantizando integridad referencial.

  • Referencia a clave primaria de otra tabla
  • Controla la consistencia de datos relacionados

💡 Ejemplos Prácticos con UNIQUE

🔄 UNIQUE Combinado vs Individual

📝 Ejemplo 1: UNIQUE Combinado

CREATE TABLE prueba_restricciones ( valor1 INTEGER, valor2 INTEGER, valor3 INTEGER, UNIQUE (valor1, valor2) );

Comportamiento: El conjunto (valor1, valor2) debe ser único, pero cada valor individual puede repetirse.

✅ Insertions Permitidas

  • (1, 1, 1) ✓
  • (1, 2, 1) ✓ - valor1 repetido pero conjunto diferente
  • (2, 1, 1) ✓ - valor2 repetido pero conjunto diferente

❌ Insertion Rechazada

  • (1, 1, 2) ❌ - conjunto (1, 1) ya existe

📝 Ejemplo 2: UNIQUE Individual

CREATE TABLE prueba_restricciones ( valor1 INTEGER, valor2 INTEGER, valor3 INTEGER, UNIQUE (valor1), UNIQUE (valor2) );

Comportamiento: Cada campo debe ser único individualmente.

🔗 Claves Foráneas (Foreign Keys)

📚 Conceptos Fundamentales

  • Integridad Referencial: Garantiza que los valores en la tabla hija existan en la tabla padre
  • Relaciones: Establece vínculos lógicos entre entidades (ej: productos-proveedores)
  • Orden de Creación: La tabla referenciada debe existir antes que la que la referencia
  • Validación: No se pueden insertar valores que no existan en la tabla padre

🛠️ Implementación con SQL Directo

📝 Creación de Tablas Relacionadas

-- Tabla padre (debe crearse primero) CREATE TABLE primaria ( valor1 INTEGER PRIMARY KEY, valor2 INTEGER ); -- Tabla hija con clave foránea CREATE TABLE foranea ( valor1 INTEGER, valor2 INTEGER, FOREIGN KEY (valor2) REFERENCES primaria(valor1) ON DELETE CASCADE );

🔄 Proceso de Inserción

  1. Crear tabla primaria: Debe existir antes que la foránea
  2. Insertar datos en primaria: Los valores deben existir primero
  3. Insertar en foránea: Solo valores que existan en primaria
  4. Validación automática: La BD verifica la existencia del valor

📁 Implementación con Ficheros en SAP HANA

💻 Enfoque SQL Directo

  • Una sola sentencia CREATE TABLE
  • Definición inline de la foreign key
  • Rápido para pruebas y desarrollo
  • Menos control de versiones

📂 Enfoque con Ficheros

  • Tres ficheros separados
  • Mejor organización del código
  • Control de versiones granular
  • Reutilización de componentes

📋 Estructura de Ficheros Necesaria

  1. tabla_primaria.hdbtable - Define la tabla padre
  2. tabla_foranea.hdbtable - Define la tabla hija (sin FK)
  3. fk_relacion.hdbconstraint - Establece la clave foránea

📝 Fichero de Constraint (.hdbconstraint)

CONSTRAINT "BBDD_MODELADO"."DB"."CLAVE_FORANEA"::"FK_FORANEA" ON "BBDD_MODELADO"."DB"."CLAVE_FORANEA"::"FORANEA" (valor2) REFERENCES "BBDD_MODELADO"."DB"."CLAVE_FORANEA"::"PRIMARIA" (valor1) ON DELETE CASCADE;

⚠️ Errores Comunes y Soluciones

🚫 Problemas Frecuentes

  • Orden de creación: Intentar crear tabla foránea antes que la primaria
  • Valores inexistentes: Insertar en tabla hija sin el valor en tabla padre
  • Sintaxis de ficheros: Usar sintaxis SQL directa en ficheros .hdbtable
  • Mayúsculas/minúsculas: Inconsistencias en nombres con comillas dobles

✅ Mejores Prácticas

  • Naming conventions: Mismo nombre para fichero y objeto
  • Namespaces consistentes: Verificar rutas completas
  • Construcción secuencial: Crear tablas padre antes que hijas
  • Validación de datos: Verificar existencia antes de insertar

🔑 Conceptos Clave para Recordar

  • UNIQUE Combinado: Evalúa el conjunto de campos como unidad
  • UNIQUE Individual: Cada campo debe ser único por separado
  • PRIMARY KEY: Solo una por tabla, puede ser compuesta
  • FOREIGN KEY: Establece relaciones y garantiza integridad
  • Orden de creación: Tabla padre antes que tabla hija
  • Ficheros separados: En SAP HANA usar .hdbconstraint para FK
  • ON DELETE CASCADE: Propagación automática de eliminaciones

🎯 Próximos Pasos

En la siguiente clase se explicarán las acciones referenciales (ON DELETE CASCADE, ON UPDATE RESTRICT, etc.) que determinan el comportamiento automático cuando se modifican o eliminan registros relacionados.