Ligaduras de Integridad y Restricciones sobre la BD Carlos A

Anuncio
Ligaduras de Integridad y Restricciones
sobre la BD
Carlos A. Olarte
[email protected]
1
Introducción y Motivación
• Por qué se deben validar los tipos de los
atributos 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?
2
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
3
Ejemplos en SQL
• Los tipos son chequeados automáticamente
• Las llaves de chequeo permiten restringir
el dominio de un atributo:
alter table personas
add c o n s t r a i n t p e r s e x o c k
check ( s e x o
i n ( ’ F ’ , ’M ’ ) ) ;
alter table productos
add c o n s t r a i n t p r o c a n t i d a d c k
check ( c a n t i d a d > 0 ) ;
• Chequeo de Obligatoriedad:
alter table personas
m o d i f y nombre not n u l l ;
Llaves Primarias (PKs)
Las llaves primarias (primary key) identifican
de manera única las tuplas de una relación y
no pueden ser nulas.
ALTER TABLE CIUDADES
ADD CONSTRAINT CIU CODIGO PK
PRIMARY KEY(CODIGO ) ;
Llaves de Unicidad
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 explı́cito por medio de una
restricción de unicidad. Por ejemplo:
alter table cursos
add c o n s t r a i n t c u r n o m b r e u k
u n i q u e ( nombre ) ;
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 tal que tr [R ∩ S] = ts[R ∩ S]
Integridad Referencial
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 tal que t1[k1] = t2[α]. Es decir:
πα(r2) ⊆ πk1 (r1)
En SQL:
alter table ciudades
add C o n s t r a i n t c i u p a i F K
f o r e i g n key ( p a i i d )
references
paises ( id );
Mantenimiento de la I.R
Al insertar: Si se inserta t2 en r2, el SGBD
debe asegurar que hay una tupla t1 en r1 tal
que: t1[k] = t2[α]. Es decir:
t2[α] ∈ πk (r1)
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.
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
SQL
Eliminación en cascada (no muy recomendable!)
alter table . . . r e f e r e n c e s
ON DELETE CASCADE
...
Actualización en cascada:
Alter table . . . r e f e r e n c e s
ON UPDATE CASCADE
...
Descargar