Un
Constraint Foreign Key es definido en la Tabla Hijo o Tabla
secundaria de una relacion Padre-Hijo.El Constraint nomina una
columna en la tabla hijo que corresponda a la columna Llave Primaria
de la tabla Padre. Las columnas no tienen que tener los mismos
nombres, pero tienen que ser del mismo tipo de datos. Los Constraint
Foreign Key definen la estructura relacional de la base de datos:
las relaciones muchos-a-uno que conectan las tablas, en su tercera
forma normal.
Si
la tabla Padre tiene un Constraint UNIQUE en lugar de Constraint
PRIMARY KEY, estas columnas pueden ser utilizadas como base de los
Constraint FOREIGN KEY, aun que sean Nullable.
Solo
un Constraint UNIQUE permite valores NULL en la columna restringida.
Lo mismo ocurre con un Constraint FOREIGN KEY. Puede insertar filas
en la tabla Hijo con Llave Externa NULL, incluso si no hay una filas
de la tabla Padre con un valor NULL. Esto crea filas huérfanas y
puede causar confusión terrible. Como regla general, todas las
columnas de un Constraint UNIQUE y todas las columnas de un
Constraint FOREIGN KEY se definen mejor con NOT NULL.
El
intento de inserción de una fila de la tabla Hijo para la que no hay
ninguna fila coincidente en la tabla padre le dará un error. Del
mismo modo, eliminar una fila de la tabla padre le dará un error si
ya hay filas que se refieren a él en la tabla hijo. Hay dos técnicas
para cambiar este comportamiento. En primer lugar, el Constraint
puede ser creado como ON DELETE CASCADE. Esto significa que si se
elimina una fila de la tabla padre, Oracle buscará en la tabla hijo
todas las filas coincidentes y eliminarlos también. Esto sucederá
de forma automática. Una técnica menos drástica es la creación de
la restricción como ON DELETE SET NULL . En este caso, si se elimina
una fila de la tabla padre, Oracle buscará en la tabla hijo todas
las filas coincidentes y establecer las columnas de clave externa en
null. Esto significa que quedarán huérfanas las filas secundarias,
pero seguirá existiendo. Si las columnas de la tabla hija también
tienen un Constraint NOT NULL, entonces la eliminación de la tabla
Padre producirá un error.
No
es posible hacer un DROP o TRUNCATE a la tabla Padre en una relación
de clave externa, incluso si no hay filas en la tabla hijo. Esto
sigue siendo válido si el ON DELETE SET NULL u ON DELETE CASCADE
cláusulas fueron utilizados. Una variante del Constraint foreign Key
es la referencia a el mismo Constraint Foreign Key. Esto define una
condición en la que existen los padres y las filas secundarias en la
misma tabla.
Un
constraint Foreign Key en una tabla hija debe referenciar las
columnas de una tabla padre y estas deben tener Constraint UNIQUE o
PRIMARY KEY.
Comentarios
Publicar un comentario