🏗️ 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
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
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
🔄 Proceso de Inserción
- Crear tabla primaria: Debe existir antes que la foránea
- Insertar datos en primaria: Los valores deben existir primero
- Insertar en foránea: Solo valores que existan en primaria
- 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
- tabla_primaria.hdbtable - Define la tabla padre
- tabla_foranea.hdbtable - Define la tabla hija (sin FK)
- fk_relacion.hdbconstraint - Establece la clave foránea
📝 Fichero de Constraint (.hdbconstraint)
⚠️ 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.