Ir al contenido principal

Constraint FOREIGN KEY

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