Ligaduras de Integridad y Restricciones sobre la BD Carlos A. Olarte ([email protected]) Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Outline 1 Introducción 2 Ligaduras de Dominio 3 Llaves Primarias 4 Llaves de Unicidad 5 Integridad Referencial Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Introducción y Motivación Por qué se deben validar los tipos de las relaciones? Por qué se debe validar el contenido de algunos atributos de relaciones? Que pasa si se inserta un valor relacionado que no existe? Que pasa si es borrado o actualizado un valor llave que sirve como llave foránea de otra relación? Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Ligaduras de Dominio Permiten la verificación de los valores introducidos en la base de datos Permite examinar las consultas para que tengan sentido (Ej Edad >0 xyz 0 no es válido) Permiten realizar chequeos de tipos como en los lenguajes de programación Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Ejemplos en SQL Los tipos son chequeados automáticamente Chequeo de valores: alter table X add constraint atr1 ck check (atr1 ck in(’S’,’N’)); Chequeo de Obligatoriedad: alter table X modify atr2 not null; Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Llaves Primarias (PKs) Se deben imponer sobre la base de datos restricciones de llave primaria (PK) en los atributos llave de las relaciones del modelo relacional. Por ejemplo para el esquema Ciudad(Codigo, Nombre) se impondrı́a la siguiente restricción: ALTER TABLE CIUDADES ADD CONSTRAINT CIU_CODIGO_PK PRIMARY KEY(CODIGO); Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Valores únicos En ocasiones es deseable que el valor de un atributo no se repita. Si el atributo es PK, de éste chequeo se encarga la BD. De lo contrario debe hacerse explicito por medio de una restricción de UNIQUE . Por ejemplo, en la relación Ciudad(Cod, Nombre) el atributo nombre no deberı́a tener valores repetidos. Por tanto se impondrı́a la siguiente restricción: ALTER TABLE CIUDAD ADD CONSTRAINT CIU_NOMBRE_UK UNIQUE(NOMBRE); Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Integridad Referencial Informalmente, es cuando un conjunto determinado de atributos de una relación aparece en otra Tupla Colgante:Se dice que tr es una tupla colgante de r si tr ∈ / r ./ s, es decir que no existe un ts talque tr [R ∩ S]) = ts [R ∩ S] Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Continuación Sea r1 (R1 ) y r2 (R2 ) dos relaciones con PKs k1 y k2 . Se dice que un subconjunto α de R2 es una FK (Llave foránea) que hace referencia a k1 si se exige que para cada t2 de r2 hay una tupla en r1 talque t1 [k1] = t2 [α] Es decir, πα (r2 ) ⊆ πk1 (r1 ) Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Continuación En SQL Alter table X add Constraint X Y FK FOREIGN KEY (Atr1) references Y(Atr1 Pk); Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Mantenimiento de la I.R Al insertar: Si se inserta t2 en r2 , el SGBD debe asegurar que hay una tupla t1 en r1 talque: t1 [k] = t2 [α] es decir t2 [α] ∈ πk (r1 ) Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Continuación Al Eliminar: Se debe constatar que el conjunto de tuplas relacionadas sea vació. De lo contrario se elimina en cascada o se retrocede la transacción. Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD Continuación Al Actualizar: Si el atributo a modificar pertenece a la FK, se debe realizar el mismo chequeo como en el inserción Por otro lado, si se modifica la PK en r1 , se debe realizar una comprobación similar a la de eliminación Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD SQL Eliminación en cascada: Alter table... references ... ON DELETE CASCADE Actualización en cascada: Alter table... references ... ON UPDATE CASCADE Todas las PK son NOT NULL Las FK y UK pueden o no ser NOT NULL dependiendo de como se hayan declarado. Carlos A. Olarte ([email protected]) Ligaduras de Integridad y Restricciones sobre la BD