3.7 Restricciones

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.