Professional Documents
Culture Documents
Es decir, si dos tuplas cualesquiera tienen igual valor en X, deben tener igual valor en Y,
para que se cumpla la dependencia funcional.
Esto significa que los valores componentes de Y de una tupla de r dependen de los valores
del componente X, o están determinados por ellos; o bien, que los valores del componente
X de una tupla determinan de manera única los valores del componente Y.
Ejemplo:
Examen (DNI, Nombre, Apellido, CodMateria, NombreMateria, FechaExamen, Nota)
Se cumplen las siguientes dependencias funcionales:
F= { DNI → Nombre, Apellido ;
CodMateria → NombreMateria ;
DNI, CodMateria, FechaExamen → Nota }
A fin de comprender mejor el concepto, podemos trazar un paralelismo entre las dependencias
funcionales y el concepto de una función matemática del tipo f(x)=y. Recordemos que según la
definición de función para un valor determinado de X la función debe retornar un único valor de Y.
Puede darse el caso que un mismo valor de Y pueda ser obtenido con distintos valores de X, pero no
se admite que ocurra a la inversa.
f(x) = y X→Y
CLAVE Y SUPERCLAVE
Dado un esquema R( A1, A2, ... An ) y un conjunto de dependencias funcionales F
asociado, se dice que X c R es una CLAVE para el esquema R si se cumplen las siguientes
dos condiciones:
Ejemplo:
AXIOMAS DE ARMSTRONG
Reflexividad
Si Y C X => se cumple X→Y
Aumento
Dada X→Y se puede inferir XZ→YZ
Transitividad
Dadas X→Y y Y→Z se puede inferir X→Z
REGLAS ADICIONALES/DERIVADAS
Descomposición
Dada X→YZ se pueden inferir X→Y y X→Z
Unión
Dadas X→Y y X→Z se puede inferir X→YZ
Pseudotransitividad
Dadas X→Y y WY→Z se puede inferir WX→Z
DEMOSTRACIONES
Cada uno de los Axiomas de Armstrong puede ser demostrado en base a la definición de
dependencia funcional:
Demostración de la Reflexividad:
Supongamos que Y C X y que existen dos tuplas t1 y t2 en algún ejemplar de la relación r
de R tales que t1[X]=t2[X]. Entonces t1[Y]=t2[Y] porque Y C X; por lo tanto, debe cumplirse
X→Y en r.
Demostración de la Transitividad:
Supongamos que se cumplen (1) X→Y y (2) Y→Z en una relación r. Entonces, para
cualesquier dos tuplas t1 y t2 en r tales que t1[X]=t2[X], debemos tener (3) t1[Y]=t2[Y] (por
la suposición de (1)), y por tanto también debemos tener (4) t1[Z]=t2[Z], (por (3) y a partir de
la suposición (2)); por lo tanto, se debe cumplir X→Z en r.
Cada una de las reglas adicionales puede ser demostrada a partir de los Axiomas de
Armstrong:
Demostración de la Descomposición:
1) X→YZ Dada
2) YZ→Y por Reflexividad (donde Y C YZ)
3) X→Y Transitividad entre 1 y 2
Demostración de la Unión:
1) X→Y Dada
2) X→Z Dada
3) X→XY Aumento con X en 1 (XX=X)
4) XY→YZ Aumento con Y en 2
5) X→YZ Transitividad entre 3 y 4
Demostración de la Pseudotransitividad:
1) X→Y Dada
2) WX→WY Aumento con W en 1
3) WY→Z Dada
4) WX→Z Transitividad entre 3 y 2
F+={ A→A,
B→B,
C→C, Triviales
AB→AB, AB→A, AB→B, (obvias)
AC→AC, AC→A, AC→C,
BC→BC, BC→B, BC→C,
ABC→ABC, ABC→AB, ABC→AC, ABC→BC, ABC→A, ABC→B, ABC→C,
A→B, A→AB, AC→B, AC→AB, AC→BC, AC→ABC,
BC→A, BC→AB, BC→AC, BC→ABC Inferidas
}
Nota: Las DF son relaciones del tipo {conjunto de atributos}→{conjunto de atributos}, por lo tanto, el
orden de los atributos no importa (AB→A es lo mismo que BA→A).
A+F = AB
B+F = B
C+F = C Con esto podemos calcular
AB+F = AB fácilmente el conjunto F+
AC+F = ABC (haciendo todas las combinaciones)
BC+F = ABC
ABC+F = ABC
X+ : = X;
viejoX+ := {};
Para probar que dos conjuntos F y G son equivalentes, sin necesidad de calcular F+ ni G+,
se debería probar que toda dependencia de F puede inferirse en G (F C G+), y
recíprocamente, toda dependencia de G se puede inferir en F (G C F+).
F+ = G+ <=> F C G+ y G C F+
Veamos un ejemplo:
R (A, B, C, D)
F = { A→B, A→C, B→A, D→A }
G = { D→ABC, B→A, B→C, A→B }
¿Son F y G equivalentes?
?
F≡G
?
F+ = G+
? ?
F C G+ G C F+
Veamos un ejemplo:
Paso 1)
F1 = { A→B, A→C, A→D, AB→D, AB→E, BE→A, BE→C }
Paso 2)
A+F1 = ABCDE
AB→D => reemplazar por A→D
B+F1 = B
A+F1 = ABCDE
AB→E => reemplazar por A→E
B+F1 = B
B+F1 = B
BE→A
E+F1 = E
B+F1 = B
BE→C
E+F1 = E
Paso 3)
A→B A+F2 – {A→B} = ACDE no es redundante
Fmin = F3
FORMAS NORMALES
Las siguientes son “definiciones prácticas” creadas como simplificaciones de las
definiciones teóricas que aparecen en la bibliografía. Si bien son equivalentes, se
recomienda consultar la bibliografía (o la siguiente página del presente apunte) para
conocer las definiciones formales de cada forma normal.
IMPORTANTE: Todas las Formas Normales aceptan DF X→Y donde Y C X (trivial). Por
eso, lo mejor es usar Fmin al momento de evaluar en qué forma normal se encuentra un
esquema dado, ya que Fmin no contiene DF triviales.
Atributo Primo
Un atributo del esquema de relación R se denomina atributo primo de R si es miembro de
cualquier clave candidata de R.
Por ejemplo:
EMPLEADO ( tipo_doc, nro_doc, nombre, apellido, fecha_nacimiento )
En este caso, los atributos tipo_doc y nro_doc son primos. Los restantes atributos son no primos.
Ejemplo:
ASIGNADO_A (legajo_empleado, cod_proyecto, fecha_desde, nombre_proyecto)
cod_proyecto nombre_proyecto
Ejemplo:
EMPLEADO (legajo, apellido, nombre, calle, nro, CP, ciudad, provincia)
Se cumplen:
legajo CP y CP ciudad, provincia
Luego, la DF legajo ciudad es una DF transitiva.
Según la definición, no habrá P.I. si se cumple: r = πR1 (r) |x| πR2 (r) |x| πR3 (r)
πR1 (r) πR2 (r) πR3 (r)
Patente Modelo Color Modelo Marca Modelo Motor Combustible
IKU-496 206 Generation Rojo 206 Generation Peugeot 206 Generation 1.4 Nafta
HRV-709 207 Compact Blanco 207 Compact Peugeot 207 Compact 1.6 Nafta
GVR-286 Vectra GT Negro Vectra GT Chevrolet Vectra GT 2.4 Nafta
ILP-456 207 Compact Azul 207 Compact 1.8 Diesel
HBN-142 206 Generation Gris
Finalmente podemos ver que no se cumple r = πR1 (r) |x| πR2 (r) |x| πR3 (r)
Por lo tanto la descomposición es con PERDIDA DE INFORMACIÓN.
Dado el esquema R(A1, A2, …, An) y la descomposición D={R1, R2, …, Rm} de R, se debe
armar un tableau T de la siguiente manera:
Las variables del tipo “aj“ se denominan variables distinguidas y son únicas por columna,
pudiendo repetirse en diferentes filas.
Las variables del tipo “bij” se denominan variables no distinguidas e inicialmente son todas
diferentes.
Procedimiento:
3) Finalmente, si luego de hacer los cambios, obtenemos al menos una fila que conste
exclusivamente de variables distinguidas (a), entonces la descomposición es sin pérdida de
información, en caso contrario, la descomposición es con pérdida de información.
Veamos un ejemplo:
A B C D E
Tableau inicial
R1 a1 a2 a3 b14 b15
R2 b21 b22 a3 a4 b25
R3 a1 b32 b33 a4 a5
A B C D E
R1 a1 a2 a3 b14 b15 CE
R2 b21 b22 a3 a4 b15
R3 a1 b32 b33 a4 a5
A B C D E
R1 a1 a2 a3 a4 b15 ED
R2 b21 b22 a3 a4 b15
R3 a1 b32 b33 a4 a5
A B C D E
R1 a1 a2 a3 a4 b15 AD B
R2 b21 b22 a3 a4 b15
R3 a1 a2 b33 a4 a5
A B C D E
R1 a1 a2 a3 a4 a5 BE
R2 b21 b22 a3 a4 b15
R3 a1 a2 b33 a4 a5
RESULTADO: No hay Pérdida de Información, ya que se logra obtener una fila con todas variables distinguidas.
NOTA: En este ejemplo fue necesario iterar 3 veces entre las DF para lograr conseguir una fila con todas variables
distinguidas.
TEOREMA DE “HEATH”
(Página 434 del libro de Elmasri-Navathe)
Nota: Este teorema solo es útil para descomposiciones de dos subesquemas, a diferencia del
método del Tableau que permite verificar la Pérdida de Información de cualquier descomposición.
Ahora veremos si hubo pérdida de dependencias funcionales. Para ello, hay que verificar si el conjunto F
original es equivalente a la unión de los cuatro conjuntos Fi de los subesquemas.
?
F ≡ F1 U F2 U F3 U F4
?
{AC, BCA, DF, AEF, DCE} ≡ {AC} U {DF} U {ADE} U {}
?
{AC, BCA, DF, AEF, DCE} ≡ {AC, DF, ADE}
Llamaremos G al conjunto resultante de la unión de los 4 conjuntos F1, F2, F3 y F4. Para verificar si F y G son
equivalentes se debe verificar si F cubre a G y viceversa.
En este caso, a simple vista vemos que G no cubre a F, ya que por ejemplo la dependencia BCA de F no
existe en G+.
BC+ en G = {BC}
Por lo tanto, podemos decir que en este caso la descomposición tiene Pérdida de Dependencias Funcionales.
Pasos:
1) Calcular Fmin
2) Para cada miembro izquierdo X que aparezca en Fmin, crear un esquema de relación {X
unión A1 unión A2 unión An} donde X→A1, X→A2, … , X→An sean todas DF de Fmin.
Veamos un ejemplo:
Dado R (ABCDEFG) y F= {ABC, ADG, ACE, CA, BC, FB}
Luego, analizamos en qué forma normal se encuentra R, para ello calculamos sus Claves Candidatas:
CC={DF}
Analizando las dependencias funcionales de Fmin, vemos que R se encuentra en 1FN ( ya que FB
viola 2FN).
R1(ABE) R4(BC)
F1={AB, AE} F4={BC}
R2(ADG) R5(BF)
F2={ADG} F5={FB}
R3(AC) R6(DF)
F3={CA} F6={}
Nota: El último esquema R6 se agrega porque ninguno de los subesquemas anteriores contiene la clave
candidata DF.
Dado el esquema R y el conj. de DF F (no es necesario trabajar con Fmin, pero si es aconsejable):
Tomar cualquier DF X→Y perteneciente a F que no sea trivial y que viole FNBC, y hacer 2
subesquemas:
R1=(X U Y) y R2=(R - Y)
Si alguno de los dos subesquemas obtenidos sigue violando FNBC, aplicar nuevamente el
punto anterior sobre dicho esquema. Repetir ese paso, e ir dividiendo en subesquemas,
tantas veces como sea necesario, hasta lograr obtener todos subesquemas que cumplan
FNBC.
Veamos un ejemplo:
F1={ M→O, M→N, N→M, N→O, O→N, O→M, MQ→S, MQ→O, OP→Q }
F2={ M→O, M→N, N→M, N→O, O→N, O→M, MQ→S, OP→Q}
F3={ M→N, N→O, O→M, MQ→S, OP→Q } = Fmin
Ahora aplicaremos el Algoritmo para obtener una descomposición de R que cumpla FNBC.
M→N
DF inferida
R1(MN) R2(MOPQS)
F1={M→N, N→M} F2={O→M, MQ→S, OP→Q, M→O}
CC={PM, PO}
DF inferida
O→M
DF inferida
R3(OM) R4(OPQS)
F3={O→M, M→O} F3={OP→Q, OQ→S }
CC={PO}
OQ→S
R5(OQS) R6(OPQ)
F5={OQ→S} F6={OP→Q}
En este caso, al inferir las DF indicadas, se logra que no haya pérdida de dependencias funcionales.