14. Integridad referencial

LA INTEGRIDAD REFERENCIAL

La integridad referencial es una limitación que se aplica a una base de datos relacional, en la que los datos y las relaciones entre ellos están organizados en tablas de filas y columnas, para que no se introduzcan datos inconsistentes. La mayoría de los sistemas gestores de bases de datos relacionales definen reglas de integridad referencial que los programadores aplican cuando crean las relaciones entre dos tablas.

Ventajas: Además de asegurar que estas referencias entre los datos están intactas y son válidas, definir a integridad referencial de una base de datos tiene muchas ventajas. La integridad referencial usa el código existente en un motor de base de datos en lugar de pedir a los programadores que escriban código de programa personalizado desde cero. Como resultado, el desarrollo de programas es más rápido, menos propenso a errores y consistente entre varios programas de aplicación que acceden a la base de datos.

Existen tres tipos de integridad referencial:

  • Integridad referencial débil: si en una tupla de R todos los valores de los atributos de K tienen un valor que no es el nulo, entonces debe existir una tupla en S que tome esos mismos valores en los atributos de J;
  • Integridad referencial parcial: si en una tupla de R algún atributo de K toma el valor nulo, entonces debe existir una tupla en S que tome en los atributos de J los mismos valores que los atributos de K con valor no nulo y; 
  • Integridad referencial completa: en una tupla de R todos los atributos de K deben tener el valor nulo o bien todos tienen un valor que no es el nulo y entonces debe existir una tupla en S que tome en los atributos de J los mismos valores que toman los de K.
Ejemplo:
Tenemos una tabla llamada PAISES y otra tabla llamada PRODUCTOS. Queremos que la tabla PRODUCTOS referencie a la tabla PAISES, para poder así saber cual es el país del cual proceden nuestros productos.

Figura 65. Hace referencia
La Primary Key de esta tabla está compuesta por las columnas PAI_CODSUC y PAI_IDENTI

Figura 66. La primary key

Podemos establecer una restricción “Foreign Key” entre ambas tablas usando las dos columnas que tienen en común: Código de la Sucursal e Identificador del País:

ALTER TABLE PRODUCTOS ADD CONSTRAINT FK_PRODUCTOS3 FOREIGN KEY (PRD_CODSUC,PRD_IDEPAI) REFERENCES PAISES(PAI_CODSUC,PAI_IDENTI);

Como ambas tablas están relacionadas mediante una “Foreign Key”, entonces:
No podemos colocar en la columna PRD_IDEPAI un número que no exista en la columna PAI_IDENTI. O sea que el número que coloquemos en la columna.
PRD_IDEPAI debe existir en la columna PAI_IDENTI
No podemos colocar NULL en la columna PRD_IDEPAI
No podemos cambiar el número que se encuentra en la columna PAI_IDENTI si ese número existe en alguna columna PRD_IDEPAI
No podemos borrar una fila de la tabla PAISES si el número de su columna PAI_IDENTI existe en la columna PRD_IDEPAI de alguna fila de la tabla PRODUCTOS

El punto 3. podemos hacerlo si establecimos “actualización en cascada”, ejemplo:

ALTER TABLE PRODUCTOS ADD CONSTRAINT FK_PRODUCTOS3 FOREIGN KEY (PRD_CODSUC,PRD_IDEPAI) REFERENCES PAISES(PAI_CODSUC,PAI_IDENTI) ON UPDATE CASCADE;

El punto 4. podemos hacerlo si establecimos “borrado en cascada”, ejemplo:

ALTER TABLE PRODUCTOS ADD CONSTRAINT FK_PRODUCTOS3 FOREIGN KEY (PRD_CODSUC,PRD_IDEPAI) REFERENCES PAISES(PAI_CODSUC,PAI_IDENTI) ON DELETE CASCADE;

Fuente: