Clave externa usando FOREIGN KEY en Oracle

La clave externa usando FOREIGN KEY en Oracle 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:

CREATE TABLE tablaHija (
    ...
    CONSTRAINT nombreClaveExterna
    FOREIGN KEY(campo1, campo2,...) REFERENCES tablaPadre(campo1,campo2) 
    ON DELETE [ CASCADE | SET NULL ]
);

En la sintaxis anterior:

En primer lugar, para asignar explícitamente un nombre a la restricción de clave externa, se utiliza la cláusula CONSTRAINT seguida del nombre. La cláusula CONSTRAINT es opcional. Si la omites, Oracle asignará un nombre generado por el sistema a la restricción de clave foránea.

En segundo lugar, especifique la cláusula FOREIGN KEY para definir una o más columnas como clave foránea y la tabla padre con las columnas a las que hacen referencia las columnas de clave foránea.

En tercer lugar, utilizamos la cláusula ON DELETE para especificar las consecuencias cuando se eliminan las filas de la tabla padre.

  • ON DELETE CASCADE: si se elimina una fila de la tabla padre, se eliminarán todas las filas de la tabla hija que hagan referencia a la fila eliminada.
  • ON DELETE SET NULL: si se elimina una fila de la tabla padre, todas las filas de la tabla hija que hagan referencia a la fila eliminada se establecerán como NULL para las columnas de clave externa.

Ejemplo

En el siguiente ejemplo tenemos una tabla llamada 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');
INSERT INTO departamentos values (2,'Dirección');

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

CREATE TABLE empleados_fk
(
    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 Oracle

Ahora cuando realices un INSERT o UPDATE el id_empleado deberá existir en la tabla 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.