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 ]
);
Lenguaje del código: CSS (css)
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');
Lenguaje del código: JavaScript (javascript)
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)
);
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);