RESTRICCIONES DE INTEGRIDAD Y DEPENDENCIAS FUNCIONALES Bases de Datos Universidad de Talca, II Semestre 2006 Jorge Pérez R. 1
Restricciones de Dominio Son la forma más elemental de restricciones de integridad. El dominio de cada atributo es el conjunto desde donde los datos provienen: nombre: strings, cadenas de símbolos. sueldo: enteros positivos. fecha creac: fechas válidas. Son simples de comprobar y mantener. Pueden existir dominios un poco más restrictivos, por ejemplo para una base de datos de clientes de un banco podríamos tener dominios como: edad: enteros positivos mayores que 17. numero cta: string de dígitos de largo 8. En cada inserción y actualización de datos se debe chequear que el dominio de los valores concuerde con el definido para cada atributo de cada relación. Algunas actualizaciones o inserciones pueden resultar en valores nulos y dependerá del uso de los datos el que se permita o rechace esta situación. Por ejemplo, si almacenamos datos de direcciones de habitantes de una ciudad con un esquema (nombre, edad, direccion, telef ono) nombre: string, null no permitido. telefono: string de dígitos de largo 8, null permitido.... El permitir o no el valor null para un atributo es una restricción de dominio, Es esencial prohibir valores nulos en la llave primaria de una relación. 2
Integridad Referencial A veces queremos obligar que cierto valor de atributo de una relación aparezca también en otra relación. Por ejemplo, si el valor del atributo que indica el código de departamento para Soto es A2, queremos que efectivamente exista un departamento con ese código (tupla amarrada). Pero si el código del departamento de Recursos Humanos es A4, no es imprescindible que exista un empleado cuyo valor para el atributo código de departamento sea A4. Esto es porque el atributo cod dept es la llave primaria de la relación departamento y la relación empleado hace referencia a esa llave. El atributo cod dept en la relación empleado es una llave foránea o llave exterior, o sea, hace referencia a la llave primaria de otra relación (en este caso departamento). Lo dibujaremos nombre cod dept f ech creac nombre sueldo cod dept f ech ing 3
Integridad Referencial Formalización Sean r 1 (R 1 ) y r 2 (R 2 ) relaciones con llaves primarias K 1 y K 2 respectivamente. Sea α un subconjunto de los atributos de r 2 (α R 2 ). Las siguientes afirmaciones son equivalentes: α es una llave foránea en r 2 con referencia a K 1 en r 1. t r 2, u r 1 tal que u[k 1 ] = t[α]. π α (r 2 ) π K1 (r 1 ). En nuestro ejemplo π cod emp (emp) = cod dept A1 A2 A3 cod dept A1 A2 A3 A4 = π cod emp (dept) 4
Integridad Referencial Modificaciones Si se inserta una tupla en una relación con llave foránea se debe asegurar que su valor exista en la tabla que relacionada por esta llave. empleado empleado {Gomez,300000,A6,5/8/2004} no está permitida, empleado empleado {Gomez,300000,A4,5/8/2004} si se permite. Si se quiere eliminar un tupla en una relación cuya llave primaria existe como llave foránea en otra relación existen dos casos: Si la tupla no tiene tuplas relacionadas en otras tablas simplemente se elimina. Si la tupla tiene tuplas relacionadas, la eliminación puede prohibirse o realizarse como una eliminación en cascada. departamento departamento σ nombre=marketing (departamento) nombre cod dept f ech creac Informática A1 01/03/2002 Ventas A3 01/01/2001 Recursos Humanos A4 01/01/2003 nombre sueldo cod dept f ech ing Torres $ 1.200.000 A1 01/01/2004 Figueroa $ 600.000 A1 01/03/2002 Salas $ 1.500.000 A1 01/01/2002 Ríos $ 2.000.000 A3 01/06/2002 Venegas $ 600.000 A1 01/06/2002 Gonzalez $ 2.000.000 A3 01/10/2002 5
Integridad Referencial Actualización Se hace una prueba similar a la de inserción si se actualiza un valor de llave foránea. δ cod depto=a6 (σ nombre=soto (empleado)) no está permitida, δ cod depto=a4 (σ nombre=soto (empleado)) si se permite. Si se hace una actualización en una tabla donde la llave primaria existe como llave foránea en otra relación, se realiza una actualización en cascada. δ cod dept=a5 (σ nombre=marketing (departamento) nombre cod dept f ech creac Informática A1 01/03/2002 Marketing A5 01/01/2002 Ventas A3 01/01/2001 Recursos Humanos A4 01/01/2003 nombre sueldo cod dept f ech ing Torres $ 1.200.000 A1 01/01/2004 Soto $ 500.000 A5 01/01/2003 Pérez $ 300.000 A5 01/10/2003 Figueroa $ 600.000 A1 01/03/2002 Salas $ 1.500.000 A1 01/01/2002 Ríos $ 2.000.000 A3 01/06/2002 Campos $ 800.000 A5 01/11/2003 Venegas $ 600.000 A1 01/06/2002 Carcamo $ 500.000 A5 01/04/2003 Gonzalez $ 2.000.000 A3 01/10/2002 6
Dependencias Funcionales Son un caso particular de restricción de integridad Nos permiten expresar propiedades semánticas de los datos de nuestra base de datos (propiedades del significado de los datos). Son una generalización del concepto de llaves. La siguiente es la definición formal de dependencia funcional: Sea r(r) una relación, α R y β R. Decimos que β depende funcionalmente de α α β si en cualquier relación legal todos los pares de tuplas t 1 y t 2 cumplen con: t 1 [α] = t 2 [α] t 1 [β] = t 2 [β] es decir, si las tuplas están de acuerdo en sus atributos α entonces también están de acuerdo en sus atributos β. Es similar a la definición de llave, de hecho se puede definir una super-llave formalmente usando dependencias funcionales: K R es super-llave de una relación legal r(r) ssi K R. O sea, el conjunto de todos los atributos siempre dependen funcionalmente de una super-llave. Una dependencia funcional no puede ser inferida desde el esquema de una relación. Debe ser definida expĺıcitamente por alguien que conoce la semántica de los atributos de la relación. El diseñador de la Base de Datos además de especificar el esquema, debe especificar el conjunto de dependencias funcionales que se deben cumplir. 7
Dependencias Funcionales Ejemplos Tabla de casas con teléfono en Chile. calle numero ciudad region telef ono color {calle, numero, ciudad, region} {color} {ciudad, region, telef ono} {calle, numero} {color} {telef ono} {ciudad, region} {calle} Tabla de alumnos de la universidad. nombre rut n alumno carrera f acultad campus {rut} {nombre, n alumno, carrera} {carrera} {f acultad} {carrera} {nombre} {nombre, carrera} {rut} {n alumno} {rut, nombre} En adelante omitiremos los paréntesis de conjuntos cuando especifiquemos dependencias funcionales. 8
Clausura de Dependencias Funcionales No es suficiente considerar un conjunto dado de dependencias funcionales, necesitamos considerar todas las dependencias que se cumplen. Considere la siguiente tabla para afiliados a un seguro de vejez rut sexo edad grupo ahorro jubilacion periodo y el siguiente conjunto F de dependencias funcionales: rut sexo, edad, ahorro sexo, edad grupo grupo, ahorro jubilacion edad, jubilacion periodo La dependencia sexo, edad, ahorro periodo se deduce lógicamente desde F. Más aun, podríamos deducir que rut es la única llave candidata. Dado un conjunto F de dependencias funcionales se define la clausura de F como el conjunto de todas las dependencias funcionales que pueden deducirse de F. Denotamos la clausura de F por F +. Para calcular F + a partir de F podemos usar la definición de dependencia funcional o un conjunto de reglas de inferencia. 9
Reglas de Inferencia 1. reflexividad: β α α β 2. aumento: α β γα γβ 3. transitividad: α β β γ α γ 4. unión: α β α γ α βγ 5. descomposición: α βγ α β α γ 6. pseudotransitividad: α β γβ δ αγ δ Las tres primeras reglas, llamadas las reglas de Armstrong, son correctas y completas bastan para deducir cualquier dependencia funcional. Son consecuencia de la definición de dependencia funcional. 4, 5, y 6 pueden deducirse a partir de 1, 2 y 3. Veremos algunos ejemplos: consideremos el mismo conjunto F de dependencias: 1. rut sexo, edad, ahorro 2. sexo, edad grupo 3. grupo, ahorro jubilacion 4. edad, jubilacion periodo Usando la regla de pseudotransitividad en 2 y 3 obtenemos 5. sexo, edad, ahorro jubilacion. Usando la regla de aumento en 5 obtenemos 6. sexo, edad, ahorro edad, jubilacion. Usando la regla de transitividad en 4 y 6 obtenemos 7. sexo, edad, ahorro periodo. 10
Clausura de un Conjunto de Atributos Dado el conjunto de dependencias funcionales F de una relación r(r) y un conjunto de atributos α R, definimos la clausura de α bajo F como: α + = {X R α X se deduce de F } El siguiente algoritmo calcula α + : clausura(α): alpha+_ant = { } alpha+ = α while(alpha+!= alpha+_ant) alpha+_ant = alpha+ foreach(β γ in F) if(β alpha+) alpha+ = alpha+ γ return alpha+ Por ejemplo: F = { rut sexo, edad, ahorro, sexo, edad grupo, grupo, ahorro jubilacion, edad, jubilacion periodo } {edad} + = {edad} {edad} + = {edad} {sexo, edad, ahorro} + = {sexo, edad, ahorro} {sexo, edad, ahorro} + = {sexo, edad, ahorro, grupo} {sexo, edad, ahorro} + = {sexo, edad, ahorro, grupo, jubilacion} {sexo, edad, ahorro} + = {sexo, edad, ahorro, grupo, jubilacion, periodo} {sexo, edad, ahorro} + = {sexo, edad, ahorro, grupo, jubilacion, periodo} {rut} + = {rut} {rut} + = {rut, sexo, edad, ahorro} {rut} + = {rut, sexo, edad, ahorro, grupo} {rut} + = {rut, sexo, edad, ahorro, grupo, jubilacion} {rut} + = {rut, sexo, edad, ahorro, grupo, jubilacion, periodo} {rut} + = {rut, sexo, edad, ahorro, grupo, jubilacion, periodo} 11
Equivalencia y Cobertura Dados E y F dos conjuntos de dependencias funcionales, decimos que: F cubre a E ssi E + F +. F es equivalente a E ssi F + = E +. F es equivalente a E ssi E cubre a F y F cubre a E. Dado F un conjunto de dependencias funcionales, F es mínimo si: Toda dependencia en F tiene un sólo atributo a la derecha. Para todo E F, E no es equivalente a F. No se puede reemplazar ninguna dependencia α X por otra β X con β α y seguir teniendo un conjunto equivalente. Si F m es mínimo y cubre a F se dice que F m es una cobertura mínima de F. 12