CLASE 051

Acciones Referenciales: ON UPDATE y ON DELETE en SAP HANA

🎯 Clase Final del Comando CREATE TABLE

Objetivo: Dominar las acciones automáticas de la base de datos en relaciones entre tablas

🔄 ¿Qué son las Acciones Referenciales?

Las acciones referenciales son acciones automáticas que realiza la base de datos en función de lo que le indiquemos al crear la tabla. Estas acciones se ejecutan cuando se actualiza o elimina un registro que tiene relaciones con otras tablas.

📊 Escenario: Relación 1:N entre Tablas

Tabla Padre: Proveedores (Primary Key)

Tabla Hija: Productos (Foreign Key → Proveedores)

Pregunta clave: ¿Qué sucede cuando elimino o actualizo un proveedor que tiene productos asociados?

🚫 RESTRICT

No permite la operación si existen registros relacionados.

🌊 CASCADE

Propaga automáticamente la operación a registros relacionados.

∅ SET NULL

Establece a NULL los campos de clave foránea relacionados.

⚙️ SET DEFAULT

Establece un valor por defecto en los campos relacionados.

📝 Reglas de Actualización (ON UPDATE)

📚 Sintaxis
ON UPDATE { RESTRICT | CASCADE | SET NULL | SET DEFAULT }
Acción Comportamiento Cuándo Usar
RESTRICT No permite actualizar si hay referencias Máxima seguridad de datos
CASCADE Actualiza automáticamente las referencias Sincronización automática
SET NULL Convierte referencias a NULL Relaciones opcionales
SET DEFAULT Establece valor por defecto Fallback predefinido

💼 Ejemplo Práctico: ON UPDATE RESTRICT

🏗️ Creación de Tablas

CREATE TABLE tabla1 ( valor1 INTEGER PRIMARY KEY, valor2 INTEGER ); CREATE TABLE tabla2 ( valor1 INTEGER PRIMARY KEY, valor2 INTEGER, FOREIGN KEY (valor2) REFERENCES tabla1(valor1) ON UPDATE RESTRICT );

📊 Datos de Prueba

-- Tabla1: (1,2), (2,3) -- Tabla2: (1,1), (2,1), (3,2), (4,2)

❌ Actualización Rechazada

UPDATE tabla1 SET valor1 = 3 WHERE valor1 = 1; -- ERROR: Violación de clave foránea

No se puede actualizar porque existen registros en tabla2 que referencian valor1 = 1

✅ Solución

1. Actualizar primero las referencias en tabla2

2. Luego actualizar el registro en tabla1

🌊 Ejemplo: ON UPDATE CASCADE

CREATE TABLE tabla2 ( valor1 INTEGER PRIMARY KEY, valor2 INTEGER, FOREIGN KEY (valor2) REFERENCES tabla1(valor1) ON UPDATE CASCADE );

✅ Actualización Automática

UPDATE tabla1 SET valor1 = 3 WHERE valor1 = 1; -- Resultado: tabla1 (3,2), (2,3) -- Resultado: tabla2 (1,3), (2,3), (3,2), (4,2)

Los valores 1 en tabla2.valor2 se actualizaron automáticamente a 3

🗑️ Reglas de Borrado (ON DELETE)

📚 Sintaxis
ON DELETE { RESTRICT | CASCADE | SET NULL | SET DEFAULT }

🚫 ON DELETE RESTRICT

❌ Borrado Rechazado

DELETE FROM tabla1 WHERE valor1 = 1; -- ERROR: No se puede borrar, hay referencias

Primero hay que eliminar o actualizar los registros dependientes

🌊 ON DELETE CASCADE

⚠️ CUIDADO: Borrado en Cascada

DELETE FROM tabla1 WHERE valor1 = 1; -- Resultado: Borra el registro de tabla1 -- Resultado: Borra AUTOMÁTICAMENTE todos los registros relacionados en tabla2

🚨 RIESGO: En sistemas Big Data, esto puede eliminar millones de registros relacionados

∅ ON DELETE SET NULL

DELETE FROM tabla1 WHERE valor1 = 1; -- Resultado: tabla1 ya no tiene el registro (1,2) -- Resultado: tabla2 (1,NULL), (2,NULL), (3,2), (4,2)

Los campos valor2 que apuntaban a 1 ahora son NULL

⚙️ ON DELETE SET DEFAULT

🛠️ Configuración Previa

CREATE TABLE tabla2 ( valor1 INTEGER PRIMARY KEY, valor2 INTEGER DEFAULT 15, FOREIGN KEY (valor2) REFERENCES tabla1(valor1) ON DELETE SET DEFAULT ); -- Importante: El valor por defecto (15) debe existir en tabla1 INSERT INTO tabla1 VALUES (15, 100);

✅ Borrado con Valor por Defecto

DELETE FROM tabla1 WHERE valor1 = 1; -- Resultado: Los registros apuntan ahora al valor por defecto 15

⚠️ Consideraciones de Seguridad

🚨 Peligros del CASCADE

  • Eliminaciones masivas: Un solo DELETE puede borrar millones de registros
  • Pérdida de datos: La recuperación requiere backups
  • Impacto en rendimiento: Operaciones costosas en sistemas grandes
  • Efecto dominó: Las eliminaciones pueden propagarse por múltiples tablas

✅ Mejores Prácticas

  • RESTRICT por defecto: Máximo control sobre los datos
  • CASCADE con cuidado: Solo en relaciones maestro-detalle obvias
  • Validar antes de aplicar: Entender el impacto de cada acción
  • Backups regulares: Siempre tener copias de seguridad
  • Pruebas en desarrollo: Validar comportamiento antes de producción

📋 Resumen Ejecutivo

Acción UPDATE DELETE Nivel de Riesgo
RESTRICT Impide actualización si hay referencias Impide borrado si hay referencias BAJO
CASCADE Actualiza automáticamente referencias Borra automáticamente registros relacionados ALTO
SET NULL Convierte referencias a NULL Convierte referencias a NULL MEDIO
SET DEFAULT Usa valor por defecto Usa valor por defecto MEDIO

🔑 Conceptos Clave para Recordar

  • RESTRICT: Opción por defecto - máximo control manual
  • CASCADE: Potente pero peligroso - usar con extrema precaución
  • SET NULL: Útil para relaciones opcionales
  • SET DEFAULT: Requiere valor por defecto válido en tabla padre
  • Orden de operaciones: Siempre actualizar/borrar dependientes antes que padres con RESTRICT
  • Validación previa: Entender las relaciones antes de aplicar acciones

🎯 Próximos Pasos

En la siguiente clase realizaremos un ejercicio práctico integral que combine todos los conceptos vistos del comando CREATE TABLE, incluyendo restricciones, claves foráneas y acciones referenciales en un caso de uso real.