Академический Документы
Профессиональный Документы
Культура Документы
A ÑO 2006
El presente apunte no constituye un desarrollo completo de los temas tratados, sino una sı́nte-
sis de los temas esenciales para ordenar ideas. En consecuencia, es absolutamente imprescindible
que el alumno revise la bibliografı́a recomendada.
1. Introducción
Vimos que las relaciones pueden usarse como modelos del ”mundo real”. En muchos casos, conocer hechos acerca del mundo
real que estamos modelizando es útil para lograr un buen diseño del esquema de la Base de Datos. Estos hechos del mundo
real implican que no todo conjunto de tuplas conforman una instancia válida del esquema de relación, aún cuando los valores
de las tuplas hayan sido tomados de los dominios correctos. Por ejemplo, si tenemos el esquema:
Empleados={ DNI, Nombre, Edad, Antiguedad }
emp :
DNI Nombre Edad Antiguedad
18564789 Juan Pérez 355 10
15322444 Pedro Lucero 47 5
10564789 Sandra Sosa 50 20
15322444 José Casas 25 20
26147896 Marı́a Molina 20 30
Restricciones que dependen de la semántica del dominio. Estas restricciones surgen de comprender el significado de las
componentes de las tuplas. En el ejemplo anterior, Juan Pérez no puede tener 355 años y Marı́a Molina no puede tener
30 años de antiguedad cuando sólo tiene 20 años de edad. Conocer estas restricciones no ayudan a lograr un buen diseño
de la base de datos, pero es necesario considerarlas para que el DBMS chequee los errores que posiblemente ocurrirán
en el momento de cargar los datos.
Restricciones que dependen de la igualdad o desigualdad de valores. Estas restricciones no dependen de qué valor tiene
una tupla en una componente dada, sino que se basan en que dos tuplas coinciden en ciertas componentes. En el ejemplo
1
anterior, no puede suceder que Pedro Lucero y José Casas tengan el mismo valor en el campo DNI, más allá de cuál
sea ese valor. Estas restricciones se conocen con el nombre de dependencias. Existen distintos tipos de dependencias:
funcionales, multivaluadas, de inclusión y de producto (join). Cada tipo de dependencia es un caso particular de la
que le sigue.
Si deseamos disponer de métodos algorı́tmicos eficientes para el diseño de una base de datos relacional debemos primero
estudiar y resolver problemas relacionados con la manipulación de dependencias entre los datos. Comenzaremos analizando
las dependencias funcionales.
2. Dependencias Funcionales
La dependencia funcional es una extensión del concepto de función para n dominios. Informalmente, una dependencia fun-
cional ocurre cuando el valor de una tupla sobre un conjunto de atributos X determina univocamente el valor de otro conjunto
de atributos Y . Esto significa que, si existen dos tuplas que coincidan en los valores para X, entonces deben coincidir en los
valores para Y .
X → Y ≡∀
b tiempo T, ∀ instancia rT , ∀ui , uj ∈ rT : ΠX (ui ) = ΠX (uj ) ⇒ ΠY (ui ) = ΠY (uj )
Notar la similitud de esta definición con la definición de función. Las diferencias radican en que la aplicamos a más de un
atributo, y que debemos considerar en la definición el tiempo, porque nuestras relaciones (a diferencia de las relaciones que
manejamos en matemática) cambian con el tiempo.
Ejemplos:
En el esquema R={ DNI, Nombre, Categorı́a, Sueldo}, donde el atributo Sueldo representa el sueldo básico, se cumple la
dependencia Categorı́a → Sueldo, dado que todos los empleados de la misma categorı́a tiene el mismo sueldo básico. Por lo
tanto, si existen dos tuplas que coincidan en el valor del atributo Categorı́a, también deben coincidir en el valor del atributo
Sueldo.
Si suponemos que un empleado no puede tener cargos en distintas categorı́as, en este esquema también se cumple que DN I →
N ombre, Categorı́a, Sueldo dado que no pueden existir dos empleados distintos con el mismo DN I.
Es sumamente importante notar que no podemos deducir a partir de una instancia r qué dependencias funcionales se
cumplen en R. Las dependencias funcionales representan restricciones de la realidad. Por consiguiente, la única manera de
determinar las dependencias funcionales que se cumplen en un esquema R es analizando cuidadosamente las restric-
ciones de la realidad que estamos representando.
Las dependencias funcionales son afirmaciones del ”mundo real”que nos dicen qué instancias son válidas para un esquema R.
No pueden ser probadas pero deben ser forzadas por el DBMS.
Puede suceder que en R no se cumpla una dependencia X → Y , pero que en alguna instancia válida sı́ se verifique. Por
ejemplo, si tenemos el esquema: Empleados={ DNI, Nombre, Categorı́a, Sueldo } y la siguiente instancia:
emp :
DNI Nombre Categorı́a Sueldo
18564789 Juan Pérez A $1500
15322444 Pedro Lucero B $890
10564789 Sandra Sosa A $1500
Definición:
Diremos que una instancia r satisface la dependencia X → Y , y lo denotamos con r sat X → Y , si y sólo si:
∀t1 , t2 ∈ r : ΠX (t1 ) = ΠX (t2 ) ⇒ ΠY (t1 ) = ΠY (t2 )
Notar que si r es una instancia de un esquema R en el que se cumple la dependencia X → Y , entonces r necesariamente
satisface la dependencia X → Y . Sin embargo, si X → Y no se cumple en R, entonces r puede o no satisfacer X → Y .
3. Implicación Lógica
Como mencionamos en el punto anterior, dado un esquema de relación R, para poder deducir las dependencias funcionales
que se cumplen en R necesitamos analizar la realidad que R modeliza, es decir conocer la semántica de los atributos de R.
Denotaremos con F al conjunto de dependencias funcionales válidas en un esquema R.
Supongamos que hemos establecido el conjunto F para un esquema R. ¿Podemos asegurar que las dependencias en F son las
únicas que se cumplen en R ? Generalmente no.
Ejemplo:
En el esquema R = {DN I, Categorı́a, Sueldo}, vimos que F = {DN I → Categorı́a, Categorı́a → Sueldo}. Pero en
este esquema también se cumple que Sueldo → Sueldo y que DN I → Sueldo. La primera es trivial; la segunda no lo es,
pero su demostración es sencilla.
Vamos a demostrar que toda instancia r que satisface F , también satisface DN I → Sueldo. Haremos la demostración por el
absurdo. Supongamos que existe una instancia r tal que r sat F y r no sat DN I → Sueldo. Si r no sat DN I → Sueldo
entonces:
∃t1 , t2 ∈ r tal que ΠDN I (t1 ) = ΠDN I (t2 ) ∧ ΠSueldo (t1 ) 6= ΠSUeldo (t2 )
El ejemplo anterior nos muestra que el conocimiento de ciertas dependencias funcionales nos puede llevar a inferir la existencia
de otras que no se encontraban en el conjunto inicial porque no eran evidentes cuando se analizó la realidad. Estas nuevas
dependencias que podemos inferir a partir de un conjunto F se conocen con el nombre de consecuencias lógicas.
Notar que F ⊆ F + .
1 Por qué podemos asegurar esto?
Vimos que en el esquema R={ DNI, Nombre, Categorı́a, Sueldo} se cumple, entre otras, la dependencia
DN I → N ombre, Categorı́a, Sueldo. Esto significa que no pueden existir dos tuplas con el mismo valor para DN I; en
consecuencia DN I determina de forma unı́voca y no ambigua al empleado.
El concepto anterior se conoce con el nombre de clave. Informalmente, la clave de un esquema es aquel conjunto de atributos
que determina unı́vocamente todo el esquema.
Puede suceder que exista más de una clave para un esquema R. En estos casos, suele designarse a una de ellas como clave
primaria. El término clave candidata lo usaremos para aquellas claves que no han sido designadas como primarias.
Cuando un conjunto de atributos X satisface la condición (1) pero no la condición de minimalidad, diremos que X es una
superclave.
Llamaremos atributos primos a todos aquellos que participan en alguna clave, y atributos no primos a aquellos que no parti-
cipan en ninguna clave.
Para determinar claves, y comprender implicaciones lógicas entre dependencias funcionales, necesitamos poder determinar
si una dependencia X → Y está en F + . Sin embargo, las definiciones de implicación lógica y clausura del conjunto de
dependencias no nos proveen de un método eficiente para poder realizar estos cálculos.
Necesit4amos un conjunto completo y consistente de reglas de derivación, que faciliten el cálculo de implicaciones lógicas.
Esto significa que toda implicación lógica pueda obtenerse por medio de estas reglas de derivación (completitud), y que todo
lo obtenido por medio de estas reglas sea una implicación lógica (consistencia).
Este conjunto de reglas, conocido con el nombre de Axiomas de Armstrong, nos permitirán derivar dependencias a partir de
un conjunto inicial F dado.
Axiomas de Armstrong
Sea R un esquema de relación, F un conjunto de dependencias funcionales y X, Y, Z ⊆ R
A1 - Reflexividad: Si Y ⊆ X, entonces X → Y .
A2 - Aumentación: Si X → Y entonces XZ → Y Z.
A3- Transitividad: Si X → Y y Y → Z entonces X → Z.
Demostración
Sólo veremos la demostración de consistencia. Para demostrar la consistencia de los axiomas, debemos ver que cada uno de
ellos produce una dependencia funcional que es una consecuencia lógica.
A1. Reflexividad:
Debemos demostrar que si Y ⊆ X y r es una instancia válida de R, entonces r sat X → Y .
Como Y ⊆ X, entonces existe Z ⊆ R tal que X = Y Z 2 .
Sea t1 , t2 ∈ r tales que ΠX (t1 ) = ΠX (t2 ). Luego, por propiedades de la proyección:
A2. Aumentación :
Haremos la demostración por el absurdo.
Sea Z ⊆ R y r es una instancia válida de R, tal que r sat X → Y y r no sat XZ → Y Z.
Si r no sat XZ → Y Z entonces existen t1 , t2 ∈ r tal que:
Como la segunda parte de la condición anterior es una contradicción, la única posibilidad que tenemos es que:
A3. Transitividad :
Queda como ejercicio.
Informalmente diremos que una dependencia X → Y se deriva de un conjunto F si puede obtenerse por medio de la sucesiva
aplicación de los axiomas de Armstrong a F . Dado que los Axiomas de Armstrong son completos toda implicación lógica, es
decir toda dependencia de F + , puede obtenerse por medio de una derivación. Además, dado que los Axiomas de Armstrong
son consistentes toda derivación produce una implicación lógica, es decir, produce una dependencia de F + . Formalizamos
estos conceptos a través de las siguientes definiciones:
Ejemplos:
Sea R = {DN I, Categorı́a, Sueldo} y F = {DN I → Categorı́a, Categorı́a → Sueldo}. Veamos que F ⊢ DN I →
Sueldo:
1. DN I → Categorı́a (dada)
2. Categorı́a → Sueldo (dada)
3. DN I → Sueldo (por transitividad de 1 y 2)
Veamos otro ejemplo. Sea R = {A, B, C, D} y F ={ A → C, B → D}, Demostraremos que F ⊢AB → ABCD:
1. A → C (dada)
2. AB → ABC (por aumentación de 1 con AB)
3. B → D (dada)
4. ABC → ABCD (por aumentación de 3 con ABC)
5. AB → ABCD (por transitividad entre 2 y 4)
Existe un conjunto de reglas de inferencia adicionales, que pueden demostrarse a partir de los axiomas de Armstrong. Ellas
son:
Aunque los Axiomas de Armstrong facilitan el proceso de calcular F + este cálculo consume mucho tiempo, dado que, aún
cuando el número inicial de dependencias sea pequeño, el número total de dependencias en F + es grande. Por otro lado,
no todas las dependencias en F + son útiles; por ejemplo, dependencias triviales de la forma X → X están en F + . Por
consiguiente, deberemos buscar en la manipulación de dependencias que exige la teorı́a de normalización métodos que no
estén basados en el cálculo de F + .
Si deseamos disponer de algoritmos eficientes para el diseño de bases de datos relacionales, debemos abordar y resolver
eficientemente algunos problemas relacionados con la manipulación de dependencias, como por ejemplo:
Determinar si X → Y ∈ F + .
Disponer de algún algoritmo eficiente para determinar la equivalencia entre dos conjuntos de dependencias.
Verificar si un conjunto de atributos es clave de un esquema R.
Determinar todas las claves de un esquema R.
Estos problemas pueden ser resueltos usando como herramienta la clausura de un conjunto de atributos.
LEMA: F ⊢ X → Y si y sólo si Y ⊆ X +
Demostración
⇐) Supongamos que Y ⊆ X + , entonces Ai ∈ X + , para todo i = 1..n. Luego, por definición de X + , F ⊢ X → Ai para
todo i = 1..n. Luego, por la regla de la unión, F ⊢ X → Y .
Si disponemos de un método eficiente para calcular X + , podremos resolver eficientemente los problemas que planteamos al
principio. Veremos ahora un algoritmo que permite calcular X + , en un tiempo que es proporcional al tamaño de F .
Algoritmo
Estudiaremos ahora métodos que nos permitan representar en forma sintética un conjunto de dependencias funcionales F . Por
ejemplo, si tenemos los siguientes conjuntos de dependencias funcionales sobre el esquema R = {A, B, C}:
F = {A → B, B → C, A → C}
G = {A → B, B → C}
Estos dos conjuntos de dependencias están representando el mismo conjunto de restricciones, dado que si bién A → C ∈ / G,
ésta puede derivarse a partir de las dependencias que hay en G. En este caso diremos que los conjuntos de dependencias F y
G son equivalentes.
Definición: Sea R un esquema de relación, y sean F y G conjuntos de dependencias funcionales sobre R. Diremos
que F y G son equivalentes, y lo denoraremos con F ≡ G, si y solamente si F + = G+ .
Si F ≡ G diremos que F es una cobertura para G y que G es una cobertura para F .
Para determinar si dos conjuntos de dependencias son o no equivalentes basta con verificar que:
Veamos por qué. Si alguna dependencia X → Y ∈ F no está en G+ , entonces es obvio que F + 6= G+ . Si toda dependencia
X → Y ∈ F está en G+ , entonces podemos asegurar que toda dependencia Z → W ∈ F + también está en G+ : una
demostración de que Z → W ∈ G+ puede formarse tomando primero la demostración de que toda dependencia X → Y ∈ F
está en G+ , y concatenándole luego una demostración de que Z → W está en F + . En forma análoga se analiza el punto 2.
Notar que, los puntos 1. y 2. puede realizarse sin calcular las clausuras de los conjuntos de dependencias, basta con ver que:
+
1. Para toda dependencia X → Y ∈ F : Y ⊆ XG .
2. Para toda dependencia X → Y ∈ G: Y ⊆ XF+ .
8. Coberturas minimales
Dado un conjunto de dependencias F podemos encontrar un conjunto equivalente a F y que tenga algunas propiedades que
son de utilidad. Una propiedad simple pero importante es que el lado derecho de cada dependencia puede descomponerse de
manera tal que quede un único atributo.
LEMA: Todo conjunto de dependencias F es equivalente a un conjunto en el cual cada dependencia tiene un sólo atributo en
su parte derecha.
Demostración
X → A1 ∈ G ∧ X → A2 ∈ G ∧ · · · ∧ X → An ∈ G
Por 1. y 2. F ≡ G.
La propiedad 2. garantiza que no hay dependencias en F que sean redundantes, es decir, que sean implicadas por las demás. La
propiedad 3. garantiza que no hay atributos redundantes en el lado izquierdo de cada dependencia. Y la propiedad 1. garantiza
que cada dependencia no tiene atributos redundantes en su lado derecho.
Es decir, en conjunto estas tres propiedades aseguran que en F cada dependencia tiene la menor cantidad de atributos posibles,
y además que no han quedado dependencias innecesarias, es decir, dependencias que pueden deducirse de las demás.
Demostración
La demostración de este teorema es constructiva, es decir, la demostración da el método para encontrar la cobertura minimal
de F .
Por el Lema anterior, asumimos que cada dependencia en F tiene un único atributo en su lado derecho. Repetidamente busca-
mos dependencias que violen las condiciones 2. (dependencias redundantes) y 3. (dependencias no reducidas a izquierda), y
modificamos adecuadamente el conjunto de dependencias dado. Como cada modificación o elimina una dependencia o elimina
un atributo, este procedimiento en algún momento finalizará llegando a un conjunto de dependencias que sea minimal.
F ≡ F − {X → A}
entonces eliminamos X → A de F . Notar que eliminar las dependencias en distinto orden puede producir que se eliminen
distintos conjuntos de dependencias.
entonces eliminamos Ai del lado izquierdo de A1 · · · Ak → B. Nuevamente, el considerar los atributos en distinto orden
puede producir que distintos conjuntos de atributos sean eliminados.
E JERCICIO : ANALIZAR POR QU É ES SUFICIENTE ELIMINAR PRIMERO TODAS LAS DEPENDENCIAS QUE NO SATISFAGAN
LA PROPIEDAD 3. Y LUEGO TODAS LAS QUE NO SATISFAGAN LA PROPIEDAD 2, PERO NO A LA INVERSA
B IBLIOGRAF ÍA