Repaso Normalizacion
Repaso Normalizacion
Repaso Normalizacion
Una vez creadas las tablas hay que verificarlas y revisar si aún se puede reducir u
optimizar de alguna manera.
Los problemas tales como la redundancia que ocurren cuando se abarrotan demasiados
datos en un sola relación son llamados anomalías. Los principales tipos son:
3.5.1.1 Definición
Una dependencia funcional en una relación R es una enunciado de la forma "si dos
tuplas de R concuerdan en los atributos A1,A2,...An (tienen los mismos valores para
cada atributo), entonces deben concordar también con otro atributo B" . Esta FD se
escribiría como A1,A2,....An --> B y se dice que "A1, A2,....An determina
funcionalmente a B".
entonces podemos simplemente escribir este conjunto de FDs como: A1, A2, ...An --->
B1,B2,...Bm
podemos entonces afirmar que: title, year --> length, filmType, studioName
*Nota:
para determinar lo anterior se puede encontrar +, todos los atributos que dependen
funcionalmente de
teniendo R(A,B,C,D,E)
entrada: ,F
salida: +
result= =
while changes to result do =result
for each ( --> F )
do
begin result -->
if result then (reflexividad)
result=result --> , -->
(transitividad)
end
end
Una tabla se encuentra en 1a NF, si todos sus atributos son atómicos (indivisibles)
El ejemplo clásico:
En 1a. NF
Si tenemos la tabla:
calificaciones_cursos
NO se encuentra en 2a NF ya que
curso
La intuición
Las dependencias funcionales
{ R1 R2 --> R1 } F+
o bien si
{ R1 R2 --> R2 } F+
Para ello se analizan todas la dependencias funcionales Fi para cada Ri que deberán ser
un subconjunto de F+
F' = F1 F2
depto,clave_curso--> descripción
3.5.6.1 Características
o
X es una super llave
result= {R}
done=false
calcular F+
while (! done) do
if(existe un esquema Ri en result que no
está en BCNF) then
si --> es una dependencia
funcional no trivial en Ri
tal que --> Ri no
está en F+ y =0
result= ( result - Ri )
( Ri - ) ( , )
else
done=true
end
Ejemplo:
R(A,B,C,D)
(A,B) (B,C,D)
3.5.7.1 Características
Se puede observar que las 2 primeras restricciones son las mismas que para BCNF pero
existe una tercera que da flexibilidad a las relaciones.
Podemos afirmar entonces que: "Si una relación está en BCNF, está también 3NF; pero
si una relación está en 3NF no necesariamente está en BCNF".
se descompondría en:
Se puede observar que al no cumplir con las 2 primeras no está en BCNF pero gracias al
relajamiento si está en 3NF
Otro ejemplo:
deptos
empleados
Aplicando la descomposición:
deptos
empleados
id_empleado nombre_depto
id_empleado --> nombre_depto
Se observa como la relación no solo está en 3NF sino también en BCNF por cumplir
con la segunda regla.
Para obtener la Fc se deben extraer todos los miembros "extraños", suponga un conjunto
F de dependencias funcionales y la dependencia --> está en F.
El atributo A es extraño en si A y
F lógicamente implica (F - { --> }) { ( - A ) --> }
Ejemplo:
F = { A --> C , AB --> C }
El atributo A es extraño en si A y
el conjunto de dependencias (F - { --> }) { --> ( - A ) } implica
lógicamente a F
Ejemplo:
F = { A --> C , AB --> CD}
*El algoritmo anterior garantiza que en una descomposición no haya pérdida (al incluir
por lo menos en una relación una de las superllaves) y que se preserven las
dependencias funcionales (al incluir cada una de ellas).
Ejemplo:
student
Fc:
sid -->name,street,city
street, city-->zip
zip --> city
Descomponer en 3NF
R1
sid -->name,street,city
street, city-->zip
zip --> city
Como se mencionó anteriormente: "Si una relación está en BCNF, está también 3NF;
pero si una relación está en 3NF no necesariamente está en BCNF".
3.6 Conclusiones
De manera que las metas del diseño de bases de datos con dependencias funcionales
son:
BCNF*
Descomposición sin pérdida
Preservación de dependencias
* Llegar a una forma BCNF puede llegar a ser complicado, debido a esto en muchas
ocasiones es suficiente con alcanzar la 3NF para lograr un buen diseño.