Capitulo 4: Diseño de bases de datos
Capitulo 4: Diseño de bases de datos
relacionales
Diseño de base de datos relacionales
Diseño de base de datos relacionales
Características de los buenos diseños relacionales
Descomposición mediante dependencias funcionales
Dominios atómicos y la primera forma normal
Teoría de las dependencias funcionales
Algoritmos de descomposición
Descomposición mediante dependencias
multivaloradas
Mas formas normales
Proceso de diseño de las bases de datos
Diseño de base de datos relacionales
Diseño de base de datos relacionales
El objetivo de diseñar un esquema de una base de
datos relacional consiste en determinar un conjunto
de esquemas de relación (Tablas) que permita
almacenar la información sin redundancias
innecesarias; pero que también permita recuperarla
fácilmente.
Para ello es necesario que los esquemas se hallen
en una
forma normal
.
Forma normal
basada en dependencias
funcionales.
Esquemas derivados de un esquema relacional
Características de los buenos diseños relacionales
Características de los buenos diseños relacionales
El diseño entidad-relación es un excelente punto de
partida para el diseño de base de datos
relacionales.
A partir del diseño E-R se puede obtener de manera
directa el esquema relacional.
La calidad del diseño E-R determinara la posibilidad
Los Esquemas bancarios
Los Esquemas bancarios
1. sucursal= (nombre_surcursal, ciudad_sucursal, activos)
2. cliente = (id_cliente, nombre_cliente, calle_cliente, ciudad_cliente) 3. préstamo = (numero_prestamo, importe)
4. cuenta = (numero_cuenta, saldo)
5. empleado = (id_empleado, nombre_empleado, número_teléfono, fecha_contratacion) 6. nombre_subordinado = (id_empleado, nombre_subordinado)
7. sucursal_cuenta = (numero_cuenta, nombre_sucursal)
8. sucursal_prestamo = (numero_prestamo, nombre_sucursal) 9. prestatario = (id_cliente, numero_prestamo)
10. impositor = (id_cliente, numero_cuenta) 11. asesor = (id_cliente, id_empleado, tipo)
12. trabaja_para = (id_empleado_trabajador, id_empleado_jefe)
13. pago = (numero_prestamo, numero_pago, fecha_pago, importe_pago) 14. cuenta_ahorro = (numero_cuenta, tasa_interes)
¿Sera bueno combinar esquemas?
¿Sera bueno combinar esquemas?
Supongamos que se combinan prestatario y préstamo para obtener Prestatario_prestamo = (id_cliente, numero_prestamo, importe)
Considerar que un cliente puede tener varios prestamos y un préstamo le corresponde a varios clientes.
El resultado provoca la repetición de la información, es posible generar inconsistencia.
(P-100 en el ejemplo)
Numero_prestamo importe … .. P-100 10000 .. … Id_cliente Numero_prestamo … … 23652 P-100 15202 P-100 23521 P-100 … …
Id_cliente Numero_prestamo importe
… .. ..
23652 P-100 10000
15202 P-100 10000
23521 P-100 10000
… .. ..
Prestamo
Prestatario
Varios a varios
Prestatario_prestamo
Un esquema combinado, sin repetición
Un esquema combinado, sin repetición
Considere la posibilidad de combinar sucursal_prestamo y préstamo
Prestamo_importe_sucursal= (numero_prestamo, importe, nombre_sucursal)
No existe repetición (como se aprecia en el ejemplo siguiente), pero puede existir
valores nulos.
Numero_prestamo importe
… ..
P-100 10000
.. …
Numero_prestamo Nombre_sucursal
… …
P-100 Cusco
… …
Numero_prestamo importe Nombre_sucursal
… .. ..
P-100 10000 Cusco
… .. ..
Prestamo Sucursal_prestamo
Conclusiones de combinar esquemas
Conclusiones de combinar esquemas
Es importante la naturaleza de las claves
primarias para decidir si las combinaciones
de esquemas tienen sentido o no.
Se han presentado problemas
concretamente, la repetición de información
cuando el atributo de reunión no era la clave
primaria de los dos esquemas que se
¿Qué acerca de esquemas más
¿Qué acerca de esquemas más
pequeños?
pequeños?
Las bases de datos reales tienen gran numero de esquemas y un
numero todavía mayor de atributos, el numero de tuplas son del orden de millones. Descubrir la repetición puede resultar costoso.
Supongamos que de algún modo se ha comenzado a trabajar con el esquema
prestatario_prestamo. ¿Cómo se reconoce que haya repetición de información y es necesario dividirlo en dos esquemas prestatario y préstamo?
Hay un problema mas fundamental todavía, No permite determinar si la
carencia de repetición es meramente un caso especial o la manifestación de una regla general.
Se puede especificar normas como “a cada valor de numero_prestamo le corresponde como máximo un único importe”, numero_prestamo sería una clave candidata“
Esta norma o regla se puede denotar como una dependencia
funcional: numero_prestamo importe
Como numero_prestamo no es clave primaria de prestatario_prestamo,
tal vez se deba repetir el importe de préstamo. Esto indica la necesidad de descomponer prestatario_prestamo.
Perdida de información debido a una mala
Perdida de información debido a una mala
descomposición
Primera forma normal
Primera forma normal
Un dominio es atómico si se considera que los elementos de ese dominio
son unidades indivisibles
Ejemplos de dominios no atómicos:
Dominio de nombres, atributos compuestos
El atributo Dirección con los atributos componentes calle y ciudad.
Números de identificación como CS101 que pueden ser dividido en dos partes. Atributo hijos en el esquema Empleado.
Se dice que el esquema de la relación R está en la primera forma normal
(1FN) si los dominios de todos los atributos de R son atómicos.
Valores no atómicos, complican el almacenamiento de datos y provocan la
redundancia de datos que pueden dar lugar a inconsistencias.
Ejemplo: En lugar de representar la relación entre las cuentas y clientes con una
relación depositante, se optara por utilizar un conjunto de titulares paracada
cuenta y con cada cliente con un conjunto de cuentas.
Los atributos con valores compuestos y los atributos con el valor
Descomposición mediante dependencias funcionales
Descomposición mediante dependencias funcionales
Para evaluar si un esquema relacional se debe
descomponerse es necesario utilizar una metodología formal,
la cual se basa en los conceptos de claves y dependencias
funcionales.
Clasificación de las restricciones de las bases de
Clasificación de las restricciones de las bases de
datos
datos
Valor-base:
Involucra una
comparación de una columna con una constante usando operadores >, <, =
Valor-neutral:
Dependencia funcional
Dependencia funcional
Son restricciones de la base de datos que exigen que las
relaciones cumplan determinadas propiedades. Las relaciones
que cumplan todas esas restricciones son
legales
.
Mientras que una clave es un conjunto de atributos que
identifica de manera univoca toda una tupla, una dependencia
funcional permite expresar restricciones que identifican de
manera univoca el valor de determinados atributos.
Dependencia funcional
Dependencia funcional
(Cont.)
(Cont.)
Sea R un esquema de relación, donde. R y R
La dependencia funcional
Se cumple para el esquema R si, en cualquier relación legal r(R), para todos los pares de tuplas t1 y t2 de r tales que si,
t1[] = t2 [] t1[ ] = t2 [ ]
Ejemplo: Considere r(A,B ) con el siguiente ejemplar de r.
Sobre este ejemplar, A B no se cumple, pero B A se
cumple.
1 4
1 5
Dependencia funcional
Dependencia funcional
(Cont.)
(Cont.)
Definición:
Sean
y
atributos de la relación R.
Decimos que
determina funcionalmente a
en R, denotado
por
Si y sólo si:
Para todos los pares de tuplas t1, t2 de la relación R, tales que
t1[
] = t2[
] también se cumple que t1[
] = t2[
]
Ejemplo:
codigo --> nombre.
t1
t2
Si t1 y t2 coinciden en el atributo ,
Dependencia funcional
Dependencia funcional
(Cont.)
(Cont.)
Se dice que K es una superclave del esquema de relación R si, K
R
K es una clave candidata para R si,
K R, y
Sin un K, R
La dependencias funcionales permiten expresar las restricciones que
no se pueden expresar con superclaves. Considere el siguiente esquema:
prestatario_prestamo = (id_cliente, numero_prestamo, importe ).
En el que se cumple la dependencia funcional:
numero_prestamo importe
Ya que por cada préstamo hay un solo importe. Pero no se cumple lo siguiente:
Empleo de las dependencias funcionales
Empleo de las dependencias funcionales
Se emplean de dos maneras:
Para probar las relaciones y ver si son legales de acuerdo con un
conjunto dado de dependencias funcionales.
Si una relación r es legal según el conjunto F de dependencias
funcionales, se dice que r satisface F.
Para especificar las restricciones del conjunto de relaciones legales.
Así, sólo habrá que preocuparse de las relaciones que satisfagan un conjunto dado de dependencias funcionales.
Si uno desea restringirse a las relaciones del esquema R que satisfacen el
conjunto F de dependencias funcionales, se dice que F se cumple en R.
Nota: Una instancia específica de un esquema de relación puede
satisfacer una dependencia funcional, incluso si la dependencia
funcional no se cumple en todas las instancias legales.
Por ejemplo, una instancia específica de préstamo puede, por
casualidad, satisfacer.
Dependencia funcional (Cont.)
Dependencia funcional (Cont.)
Se dice que algunas dependencias funcionales son
triviales
porque las satisfacen todas las relaciones.
Ejemplo:
nombre_cliente, numero_prestamo nombre_cliente nombre_cliente nombre_cliente
En general, es trivial si
Es importante darse cuenta de que una relación dada puede,
en cualquier momento, satisfacer algunas dependencias
funcionales cuyo cumplimiento no sea necesario en el
esquema de la relación.
Ejemplo
Calle_cliente ciudad_cliente
No siempre se cumple en todas las relaciones, porque, puede existir
Cerradura de un conjunto de
Cerradura de un conjunto de
dependencias funcionales
dependencias funcionales
Dado un conjunto
F
de dependencias funcionales, existen otras
dependencias funcionales que pueden ser inferidas de
F
.
Por ejemplo: Si A B y B C, entonces podemos nosotros inferir
que A C
Se utiliza la notación
F
+para denotar el
cierre
del conjunto
F
, es
decir, el conjunto de todas las dependencias funcionales que
puedan inferirse dado el conjunto
F
.
Forma Normal de Boyce-Codd
Forma Normal de Boyce-Codd
Una de las formas normales más deseadas que se pueden obtener es la forma
normal de Boyce Codd (FNBC).
Elimina todas las redundancias que se pueden descubrir a partir de las
dependencias funcionales.
El esquema de relación R esta en la FNBC respecto al conjunto F de
dependencias funcionales si, para todas las dependencias funcionales de F+ de
la forma:
, donde R y R, se cumple, al menos, una de las siguientes condiciones:
es trivial (es decir )
es una superclave para R
Ejemplo de un esquema que no esta en BCNF:
prestatario_préstamo = (id_cliente, numero_prestamo, importe), porque numero_prestamo
importe secumple en prestatario_préstamo pero numero_prestamo no es superclave
Los diseños de bases de datos están en la FNBC, si cada miembro del
Descomposición de esquemas que no se hallan BCNF
Descomposición de esquemas que no se hallan BCNF
Supongamos que nosotros tenemos un esquema R y una
dependencia funcional no trivial causa una violación de FNBC. Nosotros descomponemos R en:
•
(U )•
( R - ( - ) ) En el ejemplo anterior,
= numero_prestamo = importe
y prestatario_prestamo es remplazado por
(U ) = ( numero_prestamo, importe )
( R - ( - ) ) = (id_cliente, numero_prestamo)
FNBC y la conservación de las dependencias
FNBC y la conservación de las dependencias
Restricciones: clave primaria, dependencias funcionales, restricciones
check, asertos y disparadores.
La comprobación de estas restricciones cada vez que se actualiza la
base de datos puede ser costosa y, por tanto, resulta útil diseñar bases de datos con restricciones que se puedan comprobar de manera eficiente.
En concreto, si la comprobación de las dependencias funcionales
puede realizarse considerando sólo una relación, el coste de comprobación de esa restricción es bajo.
La descomposición en la FNBC puede impedir la comprobación
eficiente de determinadas dependencias funcionales.
Como la conservación de las dependencias suele ser deseable, se
considera otra forma normal, más débil que la FNBC, que permite que se conserven las dependencias. Esa forma normal se denomina
Tercera forma normal
Tercera forma normal
Un esquema de relación R esta en tercera forma normal (3NF) si, para
todas las dependencias funcionales:
de F+
se cumple al menos una de las siguientes condiciones:
es trivial (es decir ) es superclave para R
Cada atributo A de – esta contenido en alguna clave candidata de
R.
(NOTA: Cada atributo A de – puede estar contenido en una clave candidata diferente)
Si una relación esta en FNBC también esta en 3NF.
La tercera condición parece bastante poco intuitiva, y no resulta evidente el
Objetivos de la normalización
Objetivos de la normalización
Sea R un esquema de relación con un conjunto F
de dependencias funcionales.
Decide si un esquema de relación R está en ”buena”
forma.
En el caso de que un esquema de relación R no
está en ”buena” forma, se descomponen en una
serie de esquemas de relación {R1, R2, ..., Rn} tales
que:
Cada esquema de relación está en buena forma.
La descomposición es una descomposición sin pérdida
Preferentemente, la descomposición debe preservar las
¿Qué tan bueno es FNBC?
¿Qué tan bueno es FNBC?
Hay esquemas de bases de datos en FNBC que no
parecen estar lo suficientemente normalizada.
Considérese una base de datos
clases (curso, docente, libro)
Tal que (c, d, l)
a clase, significa que
d
está calificado para
enseñar
c
, y
l
es un libro requerido para
c
La Base de datos supone que de un curso puede ser instruida
por cualquier docente y los libros deben ser utilizados por
¿Qué tan bueno es FNBC? (Cont.)
¿Qué tan bueno es FNBC? (Cont.)
No hay dependencias funcionales triviales y por lo tanto, la
relación está en FNBC.
Anomalías de inserción, es decir, si Marilyn es un nuevo
maestro que puede enseñar database, dos tuplas necesitan incorporarse
curso docente libro
database database database database database database operating systems operating systems operating systems operating systems Avi Avi Hank Hank Sudarshan Sudarshan Avi Avi Pete Pete DB Concepts Ullman DB Concepts Ullman DB Concepts Ullman OS Concepts Stallings OS Concepts Stallings clases
¿Qué tan bueno es FNBC? (Cont.)
¿Qué tan bueno es FNBC? (Cont.)
Por lo tanto es mejor descomponer la clase en:
Esto sugiere la necesidad de formas normales superiores, como
la Cuarta Forma Normal (4NF).
Teoría de dependencias funcionales
Teoría de dependencias funcionales
Pasamos ahora a analizar la teoría formal que nos dice que las
dependencias funcionales están implicadas lógicamente por
un conjunto dado de dependencias funcionales.
Desarrollar algoritmos para generar descomposición sin
pérdida en FNBC y 3FN
Cierre de un conjunto de dependencias funcionales
Cierre de un conjunto de dependencias funcionales
Dado un conjunto F de dependencias funcionales, hay ciertas otras
dependencias funcionales que son, lógicamente, implicadas por F.
Por ejemplo: Si A B y B C, entonces podemos inferir que A C
El conjunto de todas las dependencias funcionales implicadas
lógicamente por F es el cierre de la F.
Denotado como la cerradura de F por F+.
Podemos encontrar a F+ aplicando Axiomas de Armstrong
Si , entonces (reflexividad)
Si , entonces (aumentatividad)
Si , y , entonces (transitividad)
Los Axiomas de Armstrong son correctos, ya que no generan
Ejemplo
Ejemplo
R = (A, B, C, G, H, I)
F = { A B A C CG H CG I B H}
Algunos miembros de F+
A H
Por transitividad de A B y B H
AG I
Por aumentatividad A C con G, resulta AG CG
y la transitividad con CG I
CG HI
Procedimiento para calcular F
Procedimiento para calcular F
++ Para calcular el conjunto cerradura del conjunto de dependencias
funcionales F:
F + = F repeat
for each dependencia funcional f de F+
aplicar las reglas de reflexibilidad y de aumentatividad a f
añadir las dependencias funcionales resultantes a F + for each par de dependencias funcionales f1 y f2 de F + if f1 y f2 se pueden combinar mediante la transitividad
then añadir la dependencia funcional resultante a F
+
El cierre de dependencias funcionales (Cont.)
El cierre de dependencias funcionales (Cont.)
También podemos simplificar el cálculo manual de
F
+utilizando las siguientes reglas adicionales.
Si se cumple y se cumple, entonces se
cumple (unión)
Si se cumple, entonces se cumple y
tambien se cumple (descomposición)
Si se cumple y se cumple , entonces se cumple
Ejercicio
Ejercicios
Ejercicios
Para cada uno de los esquemas, con su respectivo conjunto de
dependencias funcionales, resuelve lo siguiente: ¿Cuáles son las DF no triviales que se pueden derivar de las dependencias dadas?
R=(A,B,C,D)
F={AB C; C D; D A}
R=(A,B,C,D)
F={AB C; BC D; CD A; AD B}
R=(A,B,C,D,E)
F={A BC; B D; CD E; EA}
R=(A,B,C,D,E)
F={ABC; DE C; B D}
R = (A, B, C, G, H, I)
Cierre de los conjuntos de atributos
Cierre de los conjuntos de atributos
Dado un conjunto de atributos
se define el
cierre
de
sobre
F
(denotado por
+) como el conjunto de los atributos que son
funcionalmente determinados por
sobre
F
Algoritmo para calcular
+, cierre de
sobre
F
resultado
:=
;
while
(cambios en
resultado
)
do
for each
in
F
do
begin
if
resultado
then
resultado
:=
resultado
Ejemplo Cierre de los conjuntos de atributos
Ejemplo Cierre de los conjuntos de atributos
R = (A, B, C, G, H, I) F = {A B
A C CG H CG I B H}
(AG)+
1. result = AG
2. result = ABCG (A C y A B)
3. result = ABCGH (CG H y CG AGBC)
4. result = ABCGHI (CG I y CG AGBCH)
Es AG una clave candidata?
1. Es AG una superclave?
1. ¿AG R? == es (AG)+ R
2. Es cualquier subconjunto de AG una superclave?
Aplicaciones de cierre de atributos
Aplicaciones de cierre de atributos
Comprobar superclaves:
Para comprobar si es superclave, se calcula +, y se comprueba
si contiene todos los atributos de R.
Comprobar dependencias funcionales
Se puede comprobar si se cumple la dependencia funcional
(o en otras palabras, si se halla en F+), comprobando si +.
Es decir, se calcula +empleando el cierre de los atributos y luego
se comprueba si el cierre contiene a .
Esta prueba resulta especialmente útil.
Ofrece una manera alternativa de calcular el
cierre de F
Para cada R, se halla el cierre +, y, para cada S +, se
Recubrimiento canónico
Recubrimiento canónico
Un conjunto de dependencias funcionales pueden tener
dependencias redundantes que pueden haber sido inferidas
de otras.
Por ejemplo: A C es redundante en: {A B, B C}
Parte de una dependencia funcional puede ser redundante
Ejm.: Derecha: {A B, B C, A CD} puede simplificarse
{A B, B C, A D}
Ejm.: Izquierda: {A B, B C, AC D} puede simplificarse
{A B, B C, A D}
Atributos raros
Atributos raros
Un atributo de un DF es raro si se puede eliminar sin modificar el cierre de F.
Considere un conjunto F de dependencias funcionales y la dependencia
funcional de F.
El Atributo A es raro en si A
y F implica lógicamente a (F – { }) {( – A) }.
El Atributo A es raro en si A y el conjunto de dependencias funcionales (F –
{ }) { ( – A)} implica lógicamente F.
Hay que tener cuidado con la dirección de las implicaciones al utilizar la definición de los atributos raros: si se intercambian el lado derecho y el izquierdo, la implicación se cumplirá siempre. Es decir, (F – { }) {( – A) } siempre implica lógicamente a F, y F
también se implica lógicamente siempre a (F – { }) {(– A)}
Ejemplo: Dado F = {A C, AB C }
B es raro en AB C porque {A C, AB C} implica lógicamente a A C
Ejemplo: Dado F = {A C, AB CD}
C será raro en el lado derecho de AB CD desde AB C puede deducirse
Comprobar si un atributo es raro
Comprobar si un atributo es raro
Considere un conjunto
F
de dependencias funcionales y la
dependencia funcional
en
F
.
Para comprobar si el atributo A
es raro
en
1. Calcular ({} – A)+ usando las dependencias en F2. Verificar que ({} – A)+ contiene ; si es así, A es raro en
Para comprobar si el atributo
A
es raro en
1. Calcular + usando solo las dependencias en
F’ = (F – { }) { ( – A)},
Ejemplo de comprobar si un atributo es raro
Ejemplo de comprobar si un atributo es raro
Dado
F
= {
AB
CD
,
A
E, E
C
}, comprobar si
C
es raro en
AB
CD
Hay que calcular el cierre de los atributos de
AB
bajo F’ = {
AB
D
,
A
E E
C
} el cierre es
ABCDE, que incluye a CD, por lo que se infiere que
Recubrimiento canónico
Recubrimiento canónico
Un recubrimiento canónico para F es un conjunto de dependencias F
c tales
que:
F implica lógicamente todas las dependencias de F
c, y
F
cimplica lógicamente todas las dependencias de F, y
Ninguna dependencia funcional de F
ccontiene atributos raros, y
El lado izquierdo de cada dependencia funcional de F
c es único. Es decir no hay dos
dependencias 1 1 y 2 2 de Fc tales que 1 = 2.
Para calcular el recubrimiento canónico para F:
Fc = F
repeat
Utilizar la regla de unión para sustituir las dependencias de Fc de la forma
1 1 y 1 2 con 1 1 2
Hallar una dependencia funcional de Fc con un atributo raro en o en
/*Nota: la comprobación de los atributos raros se lleva acabo empleando Fc no F */ Si se halla algún atributo raro, hay que eliminarlo de
until Fc ya no cambie.
Nota: La regla de la Unión puede llegar a ser aplicables después de de que
Calcular el recubrimiento canónico
Calcular el recubrimiento canónico
R = (A, B, C)
F = {A BC B C A B AB C}
Combinar A BC y A B en A BC
El conjunto ahora es {A BC, B C, AB C}
A es raro en AB C
Verificar si el resultado de eliminar A de AB C es implicado por otras
dependencias funcionales.
Si: de hecho, B C ya esta presente! El conjunto ahora es {A BC, B C}
C es raro en A BC
Verificar si A C es implicado lógicamente por A B y las demás dependencias Si: usando la transitividad de A B y B C.
Descomposición sin perdida
Descomposición sin perdida
Sea R un esquema de relación y F un conjunto de dependencias
funcionales de R. Supóngase que R1 y R2 forman una descomposición de R. Sea r(R) una relación del esquema de R. Se dice que la
descomposición sin pérdidas si, para todos los ejemplares legales de la base de datos.
r = R1(r ) |X| R2(r )
Se pueden utilizar las dependencias funcionales para probar si ciertas
descomposiciones son sin pérdidas. Sean R, R1, R2 y F como se
acaban de definir R1 y R2 forman una descomposición sin pérdidas de R si, como mínimo, una de las dependencias funcionales siguientes se halla en F+:
Ejemplo
Ejemplo
R = (A, B, C)
F = {A
B, B
C)
Puede ser descompuesto en dos formas diferentes
R
1= (A, B), R
2= (B, C)
Descomposición de reunión sin perdida:
R1 R2 = {B} y B BC
Conserva la dependencia
R
1= (A, B), R
2= (A, C)
Descomposición de reunión sin perdida:
R1 R2 = {A} y A AB
No conserva la dependencia.
Conservación de las dependencias
Conservación de las dependencias
Sea F
iel conjunto de dependencias de F
+que solo incluye atributos de R
i.
Una descomposición
conserva dependencias
, si
(
F
1
F
2
…
F
n)
+=
F
+
Si no es así, entonces comprobar las actualizaciones de
violación de dependencias funcionales que pueden
Comprobar la conservación de las dependencias
Comprobar la conservación de las dependencias
Para verificar si una dependencia
se conserva en una
descomposición de
R
en
R
1,
R
2, …,
R
nutilizamos la siguiente
prueba (Realizado con cerradura de atributos con respecto a
F
)
result =
while (cambios en result) do
for each Ri de la descomposición
t = (result Ri)+ R
i
result = result t
Si result contiene todos los atributos de , entonces la dependencia
funcional es conservada.
Aplicamos la prueba sobre todas las dependencias de
F
para
verificar si una descomposición conserva las dependencias.
Este procedimiento toma un tiempo polinómico, en lugar del
exponencial necesario para calcular
F
+y
(
F
Ejemplo
Ejemplo
R =
(
A, B, C
)
F =
{
A
B
B
C
}
Key = {
A
}
R
no esta en BCNF
Descomponemos
R
1= (
A, B), R
2=
(B, C)
R
1y
R
2esta en BCNF
Descomposición de reunión sin pérdidas
Comprobación de la FNBC
Comprobación de la FNBC
Para verificar si una dependencia no trivial causa una violación de BCNF
1. Calcular + (la cerradura del atributo ), y
2. Comprobar si incluye todos los atributos de R, es decir, si es si es superclave de R.
Comprobación simplificada: para comprobar si un esquema de relación R esta en
BCNF, basta con comprobar sólo si las dependencias del conjunto F dado violan la BCNF, en vez de comprobar todas las dependencias de F+.
Se puede probar que, si ninguna de las dependencias de F provoca
violaciones de la BCNF, ninguna de las dependencias de F+ lo hace tampoco.
Por desgracia, el último procedimiento no funciona cuando se descompone
relaciones. Es decir en las descomposiciones no basta con emplear F cuando se comprueba si la relación Ri de R viola FNBC.
Considere R = (A, B, C, D, E), con F = { A B, BC D}
Descomponer R en R
1 =(A,B) y R2 =(A,C,D, E)
Ninguna de las dependencias de F contiene únicamente atributos de
(A,C,D,E) por lo que se podría creer erróneamente que R2 satisface la BCNF.
De hecho, hay una dependencia AC D en F+ que prueba que R
2 no esta
Comprobar la descomposición de la FNBC
Comprobar la descomposición de la FNBC
Para verificar si una relación
R
ien una
descomposición de
R
que esta en BCNF,
Para cada subconjunto
de atributos de R
ise
comprueba que
+no incluye ningún atributo de R
i-
o bien incluye todos los atributos de R
i.
Si algún conjunto de atributos de
de
Ri
viola esta
condición, considérese la siguiente dependencia
funcional, que se puede probar que se halla en F+.
(
+-
)
R
i
Algoritmo de descomposición de la FNBC
Algoritmo de descomposición de la FNBC
result := {R };
done := false; calcular F +;
while (not done) do
if (hay algún esquema Ri de result que no se halle en BCNF)
then begin
Sea una dependencia funcional no trivial que se cumple en Ri
tal que Ri no se halla en F +, y = ;
result := (result – Ri ) (Ri – ) (, ); end
else done := true;
Ejemplo de descomposición de BCNF
Ejemplo de descomposición de BCNF
R = (A, B, C )
F = {A
B
B
C}
Clave = {A}
R no esta en BCNF (B
C porque B no es
superclave)
Decomposición
R
1= (
B, C)
Ejemplo de descomposición de BCNF
Ejemplo de descomposición de BCNF
Relación R original y F dependencia funcional
R = (nombre_sucursal, ciudad_sucursal, activos,
nombre_cliente, numero_prestamo, importe )
F = {nombre_sucursal activos ciudad_sucursal numero_prestamo importe nombre_sucursal } clave= {numero_prestamo, nombre_cliente}
Decomposition
R1 = (nombre_sucursal, ciudad_sucursal, activos)
R2 = (nombre_sucursal, nombre_cliente, numero_prestamo , importe )
R3 = (nombre_sucursal, numero_prestamo , importe )
R4 = (nombre_cliente, numero_prestamo )
Descomposición Final
Conservación de dependencias en BCNF
Conservación de dependencias en BCNF
No siempre es posible obtener una descomposición de
FNBC que conserve la dependencia
R =
(
J, K, L
)
F =
{
JK
L
L
K
}
Dos claves candidatas =
JK
y
JL
R
no esta BCNF
Cualquier descomposición de
R
no conservara la
dependencia.
JK
L
Esto implica que las pruebas para
JK
L
requiere
Ejemplo de 3FN
Ejemplo de 3FN
Relación R:
R =
(
J, K, L
)
F =
{
JK
L, L
K
}
Dos claves candidatas:
JK
y
JL
R
esta en 3FN
JK
L
JK
es una superclave
Redundancia en 3FN
Redundancia en 3FN
Hay una cierta redundancia en este esquema
Ejemplo de problemas debido a la redundancia en 3FN
R = (J, K, L)
F = {JK L, L K }
J j1 j2 j3 null L l1 l1 l1 l2 K k1 k1 k1 k2
repetición de información (ejm., la relación l1, k1)
Necesidad de usar valores nulos (ejm., para representar la relación
Comprobar la 3NF
Comprobar la 3NF
Optimización: Necesidad de comprobar solo DFs en
F
, no hay necesidad comprobar DFs in
F
+.
Utilizar la cerradura de atributo para verificar cada
dependencia
, si
es una superclave.
Si
no es una superclave, tenemos que verificar si
cada atributo en
esta contenido en una clave
candidata de
R
Esta prueba es bastante cara, ya que implica la búsqueda
Algoritmo de descomposición de 3NF
Algoritmo de descomposición de 3NF
Sea Fc recubrimiento canónico para F;
i := 0;
for each dependencia funcional
en Fc doif ninguno de los esquemas Rj, 1 j i contiene
then begin
i := i + 1;
Ri :=
end
if ninguno de los esquemas Rj, 1 j i contiene una clave candidata
para R
then begin
i := i + 1;
Ri := cualquier clave candidata para R;
end
Algoritmo de descomposición de 3NF
Algoritmo de descomposición de 3NF
(Cont.)
(Cont.)
El algoritmo asegura:
Cada relación
R
i
esta en 3NF
Descomposición 3NF : Ejemplo
Descomposición 3NF : Ejemplo
Esquema relación:
Sucursal_Asesor= (id_cliente, id_empleado, nombre_sucursal, tipo )
Dependencias funcionales:
1. id_cliente, id_empleado nombre_sucursal, tipo 2. id_empleado nombre_sucursal
3. id_cliente, nombre_sucursal id_empleado
Primero calculamos el recubrimiento canónico
nombre_sucursal es raro en la derecha de la primera dependencia
No hay otros atributos raros, así tenemos FC =
id_cliente, id_empleado tipo
3NF Decompsition Example (Cont.)
3NF Decompsition Example (Cont.)
El bucle for genera los siguientes esquemas en 3NF:
(id_cliente, id_empleado, tipo) (id_empleado, nombre_sucursal)
(id_cliente, nombre_sucursal, id_empleado)
Si las DFs fueron considerados en orden diferente, con luna 2nd considerada
después de la 3rd,
(id_empleado, nombre_sucursal)
no estaria incluido en la descomposición porque ello es un subconjunto (id_cliente, nombre_cliente, id_empleado)
Menor extensión del algoritmo de descomposición de 3NF: el fin de bucle for,
detecta y elimina esquemas, tales como (id_empleado, nombre_sucursal), los cuales son subconjunto de otros esquemas.
Resultado no depende sobre el orden considerado en las DFs
El resultado simplificado de esquema en 3FN es:
(id_cliente, id_empleado, tipo)
Comparación de BCNF y 3NF
Comparación de BCNF y 3NF
Siempre es posible descomponer una relación en un
conjunto de relaciones que están en 3FN tales que:
La descomposición es sin perdida
Las dependencias se conservan
Siempre es posible descomponer una relación en un
conjunto de relaciones que están en BCNF tales
que:
La descomposición es sin perdida
Objetivo del diseño de base de datos
Objetivo del diseño de base de datos
Objetivo para un diseño de base de datos relacional es:
FNBC.
Ausencia de pérdidas.
Conservación de las dependencias.
Si no podemos lograr esto, aceptamos uno de lo siguiente:
La falta de conservación de dependencias La redundancia debido al uso de 3FN
Curiosamente, SQL no proporciona una forma directa de especificar
dependencias funcionales que no sean superclaves.
Puede especificar DFs con asertos, pero son caras para poner a prueba
Por tanto, aunque se tenga una descomposición que conserve las