Clave externa usando FOREIGN KEY en PostgreSQL

La clave externa usando FOREIGN KEY en PostgreSQL se aplica sobre uno o varios campos que van hacer referencia a la clave primaria de otra tabla. La tabla que contiene la clave externa es considerada como la tabla de referencia o tabla hija y la tabla que contiene la clave primaria es considerada como la tabla padre o simplemente la tabla referenciada.

Una tabla puede contener una o varias claves externa.

Sintaxis tabla nueva

La sintaxis para crear una clave externa es la siguiente:

[CONSTRAINT nombreClaveExterna
   FOREIGN KEY(columnaTabla) 
   REFERENCES tablaPadre(columnaTablaPadre)
   [ON DELETE accion]
   [ON UPDATE accion]

En la sintaxis anterior:

  • Línea 1: se crea una clave externa llamada nombreClaveExterna
  • Línea 2: se establecen las columnas de contendrá la clave externa
  • Línea 3: se referencia a la tabla padre con las columnas de la tabla padre
  • Línea 4 y 5: son opciones y son acciones que se realizarán al borrar o actualizar la tabla.

Las acciones permítidas en las líneas 4 y 5 son las siguientes:

  • SET NULL: si intentas borrar un registro de la tabla padre y la tabla hija tiene definida esta acción, los valores de la tabla hija afectados se establecerán a nulo.
  • SET DEFAULT: si intentas borrar un registro de la tabla padre y la tabla hija tiene definida esta acción, los valores de la tabla hija afectados se establecerán al valor por defecto.
  • NO ACTION: si intentas borrar un registro de la tabla padre y la tabla hija tiene definida esta acción te devolverá un fallo, ya que no se puede borrar registros de la tabla padre sino se borrar en la tabla hija.
  • CASCADE: si intentas borrar un registro de la tabla padre y la tabla hija tiene definida esta acción se borran de ambas tablas los registros afectados.

Ejemplo

En el siguiente ejemplo tenemos una tabla de departamentos ya creada con la lista de los departamentos:

create table departamentos
(
    id_departamento int PRIMARY KEY,
    nombre varchar(50)
);

INSERT INTO departamentos 
values (1,'RRHH'), (2,'Dirección');

Ahora queremos crear una tabla de empleados que tenga como clave externa el id_departamento de la tabla departamentos:

CREATE TABLE empleados
(
    id_empleado int,
    id_departamento int,
    nombre varchar(50),
    sueldo integer,
    CONSTRAINT departamentosID
       FOREIGN KEY(id_departamento) 
       REFERENCES departamentos(id_departamento)
);
Clave externa usando FOREIGN KEY en PostgreSQL

Ahora cuando realices un INSERT o UPDATE el id_empleado deberá existir en la tabla de departamentos, de lo contrario, te devolverá un fallo.

Sintaxis tabla existente

Si la tabla ya existe puedes crear una clave externa utilizando el ALTER:

ALTER TABLE nombreTablaHija 
ADD CONSTRAINT nombreClaveExterna 
FOREIGN KEY (columnasTablaHija) 
REFERENCES nombreTablaPadre (columnasTablaPadre);

Escribir un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.