Las
restricciones son estructuras no permitidas. Hay dos tipos: inherentes
y del usuario. Las inherentes al modelo, tal como no tener tuplas repetidas
y las del usuario que validan las instancias de la relaciones.
Restricciones
inherentes
Además
de las derivadas por el concepto de relación, existe la llamada
regla de integridad de entidad.
"Ningún
atributo que forme parte de la llave primaria de una relación puede
tomar un valor nulo". Nulo significa desconocido o inexistente. Esta
restricción debería aplicarse a las llaves alternativas,
pero el modelo no lo exige.
Justificaciones
- Las entidades
del mundo real son identificables y distinguibles.
- Si una entidad
es lo bastante importante en el mundo real como para requerir una
representación explícita en la base de datos, tal entidad
deberá ser susceptible de indentificarla sin ambigüedad,
pues de lo contrario seria imposible hablar de ella. Por esto, la
regla de integridad de las entidades se expresa así: En una
base de datos, nunca registraremos información acerca de algo
que no podamos identificar.

Restricciones
de usuario
Se
pueden definir como un predicado sobre un conjunto de atributos, de tuplas
o de dominios, que debe ser verificado para que constituya una ocurrencia
valida del esquema.
Dentro
de estas, destaca la restricción de integridad referencial:"
Si una relación R2 (relación que referencia) tiene un descriptor
que es la llave primaria de la relación R1 (relación referenciada),
todo valor de dicho descriptor debe concordar con un valor de la llave
primaria de R1 o ser nulo". El descriptor es una llave ajena de la
relación R2.
EDITORIAL(
NOMBRE_E, DIRECCION, CIUDAD, PAIS ); PK: NOMBRE_E
LIBRO( CODIGO,TITULO,IDIOMA,...., NOMBRE_E
); PK:CODIGO FK:NOMBRE_E
La
llave foránea, NOMBRE_E podría ser null, ya que en un momento
determinado podríamos no conocer la editorial de un libro.
Esta
llave que referencia a EDITORIAL debe concordar con la llave primaria
de EDITORIAL.
AUTOR(
NOMBRE, NACIONALIDAD, INSTITUCION, ....); PK:NOMBRE
LIBRO( CODIGO, TITULO, IDIOMA, EDITORIAL,...);
PK:CODIGO
ESCRIBE( NOMBRE, CODIGO ); PK:NOMBRE+CODIGO
FK:NOMBRE, CODIGO
Las
llaves foráneas NOMBRE y CODIGO no pueden ser nulos, porque ambas
son la llave primaria de ESCRIBE.
Además
de definir las llaves foráneas, hay que definir las consecuencias
de las operaciones de borrar y modificar tuplas de la relación
referenciada:
Operación
restringida (RESTRICT)
Borrar o modificar tuplas de una relación que contiene la llave
primaria referenciada sólo se permite, si no existen tuplas con
dicha llave en la relación que contiene la llave foránea.
Ej: para borrar una editorial, no tendría que haber ningún
libro que estuviese publicado por dicha editorial.
Operación con transmisión en cascada (CASCADE)
El borrado o modificación de tuplas de la relación que
contiene la llave primaria referenciada lleva consigo el borrado o modificación
en cascada de las tuplas de la relación que contiene la llave
foránea. Ej: Al modificar el nombre de una editorial en EDITORIAL,
se tendría que modificar también dicho nombre en todos
los libros publicados por dicha editorial.
Operación con puesta a nulos (SET NULL)
El borrado o la modificación de tuplas de la relación
que contiene la llave primaria referenciada lleva consigo poner a nulos
los valores de las llaves foráneas de la relación que
referencia. Ej: cuando borramos una editorial, los libros que ha publicado
dicha editorial y que se encuentran en LIBRO se les coloque el atributo
nombre_e a nulos. Esta opción solo es posible cuando el atributo
que es llave foránea admite el valor nulo.
Operación con puesta a valor por defecto (SET DEFAULT)
El borrado o la modificación de tuplas de la relación
que contiene la llave primaria referenciada lleva consigo poner el valor
por defecto a la llave foránea de la relación que referencia.
Este valor debe ser definido al momento de crear la tabla correspondiente.
Operación que desencadena un procedimiento
de usuario.
El borrado o la modificación de tuplas de la tabla referenciada
pone en marcha un procedimiento definido por el usuario.
|