3.2 Reglas de Integridad

Reglas de integridad

Los conceptos básicos de integridad en el modelo relacional son el de llave primariallave foráneavalores nulos y un par de reglas de integridad.

Una llave primaria es uno o un conjunto de atributos que permiten identificar a las n-adas de manera única en cualquier momento.

Una llave foránea de una relación es un atributo que hace referencia a una llave primaria de otra relación; esto da pie a que una relación pueda tener variasllaves foráneas.

Un valor nulo es un valor que está fuera de la definición de cualquier dominio el cual permite dejar el valor del atributo ``latente'', su uso es frecuente en las siguientes situaciones:

i) Cuando se crea una n-ada y no se conocen todos los valores de cada uno de los atributos.
ii) Cuando se agrega un atributo a una relación ya existente.
iii) Para no tomarse en cuenta al hacer cálculos numéricos.

Las dos reglas de integridad tienen que ver precisamente con los conceptos antes mencionados y son:

Integridad de Relaciones. Ningún atributo que forme parte de una llave primaria puede aceptar valores nulos.
Integridad Referencial. Al tener una relación 9#9 con llave primaria 10#10 de dominio 11#11 y otra relación 1#1 con atributo 10#10 que no es llave primaria de 1#1, entonces cualquier valor en el atributo 10#10 en 1#1 debe ser nulo, oun valor que esté en el atributo 10#10 de la llave primaria de una n-ada en la relación 9#9

Nulos

Cuando en una tupla un atributo es desconocido, se dice que es nulo. Un nulo no representa el valor cero ni la cadena vacía, éstos son valores que tienen significado. El nulo implica ausencia de información, bien porque al insertar la tupla se desconocía el valor del atributo, o bien porque para dicha tupla el atributo no tiene sentido.
Ya que los nulos no son valores, deben tratarse de modo diferente, lo que causa problemas de implementación. De hecho, no todos los SGBD relacionales soportan los nulos.

Regla de integridad de entidades

La primera regla de integridad se aplica a las claves primarias de las relaciones base:ninguno de los atributos que componen la clave primaria puede ser nulo.
Por definición, una clave primaria es un identificador irreducible que se utiliza para identificar de modo único las tuplas. Que es irreducible significa que ningún subconjunto de la clave primaria sirve para identificar las tuplas de modo único. Si se permite que parte de la clave primaria sea nula, se está diciendo que no todos sus atributos son necesarios para distinguir las tuplas, con lo que se contradice la irreducibilidad.
Nótese que esta regla sólo se aplica a las relaciones base y a las claves primarias, no a las claves alternativas.

Regla de integridad referencial

La segunda regla de integridad se aplica a las claves ajenas: si en una relación hay alguna clave ajena, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos.
La regla de integridad referencial se enmarca en términos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cómo puede evitarse. La cuestión es ¿qué hacer si estando en un estado legal, llega una petición para realizar una operación que conduce a un estado ilegal? Existen dos opciones: rechazar la operación, o bien aceptar la operación y realizar operaciones adicionales compensatorias que conduzcan a un estado legal.
Por lo tanto, para cada clave ajena de la base de datos habrá que contestar a tres preguntas:
Regla de los nulos: ¿Tiene sentido que la clave ajena acepte nulos?
Regla de borrado: ¿Qué ocurre si se intenta borrar la tupla referenciada por la clave ajena?
Restringir: no se permite borrar la tupla referenciada.
Propagar: se borra la tupla referenciada y se propaga el borrado a las tuplas que la referencian mediante la clave ajena.
Anular: se borra la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos).
Regla de modificación: ¿Qué ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena?
Restringir: no se permite modificar el valor de la clave primaria de la tupla referenciada.
Propagar: se modifica el valor de la clave primaria de la tupla referenciada y se propaga la modificación a las tuplas que la referencian mediante la clave ajena.
Anular: se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos).