Foreign keys

Para la delcaración de claves foráneas seguiremos esta sintaxis en la parte de restricciones de tabla:

 | [CONSTRAINT [constraint_name]] 
        FOREIGN KEY (index_col_name, ...)
        REFERENCES another_table_name (index_col_name, ...)
        [ ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION } ]
        [ ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION } ]

La convención será fk_{nombreTabla}_{columnas}

Acciones referenciales

Es posible programar qué va a pasar con las filas de una tabla ante un determinado evento en la fila que referencia.

ON DELETE

Define qué pasa con las filas cuando se elimina el registro al que referencian

  • RESTRICT: no permite eliminar registros de la tabla relacionada si hay registros relacionados en la tabla actual

  • CASCADE: elimina los registros relacionados al registro eliminado

  • SET NULL: Establece a NULL las columnas de la FK cuando el registro relacionado se elimina.

  • NO ACTION: Equivalente a RESTRICT

ON UPDATE

Define qué pasa con las filas cuando se actualiza el registro con el que se relacionan:

  • RESTRICT: no permite actualizar registros de la tabla relacionada si hay registros relacionados en la tabla actual

  • CASCADE: actualiza los registros relacionados al registro modificado

  • SET NULL: Establece a NULL las columnas de la FK cuando el registro relacionado se modifica.

  • NO ACTION: Equivalente a RESTRICT

Por ejemplo, si quisiéramos crear esta base de datos

Vamos a crear estas tablas con una FK que:

  • No permita eliminar personas que son dueños de algún perro

  • Si el DNI de una persona cambia, se actualiza en el perro del que son dueños.

Last updated