Teoria de la normalización en base de datos
Tabla de Contenido
-
Introducción a la teoría
- Normalización de relaciones en bases de datos
-
1ª Forma Normal
-
2ª Forma Normal
-
3ª Forma Normal
-
4ª Forma Normal
-
5ª Forma Normal
-
Forma BCNF
- Dependencias
-
Dependencias funcionales
-
Dependencias funcionales totales
-
Dependencias multivalor
-
Dependencias de JOIN
-
Consejos para obtener relaciones normalizadas
Contenido
-
Normalización de relaciones
- Para que las relaciones de la base de datos no tengan propiedades indeseables debemos hacer que cumplan una serie de relaciones. A esto se le llama normalizar relaciones.
- La teoría de la normalización nos permite conocer esas relaciones indeseables, de forma que podamos transformarlas a otras de forma más conveniente.
- Sin embargo, la normalización no es una panacea, aunque es una buena herramienta a tener en cuenta si trabajamos con bases de datos.
- Las llamadas formas normales van de la primera forma normal a la quinta, de forma que una forma normal cumple las reglas de las formas normales que le preceden. Es decir, si tenemos una relación que es tercera forma normal dicha forma también cumple las reglas de la segunda y la primera forma normal.
|
-
Normalización de relaciones en bases de datos
-
Descripción
- Una relación es primera forma normal si y solo si sus tuplas (filas) contienen valores atómicos, es decir, no contienen valores que a su vez sean conjuntos.
- En resumen, que todos los atributos (columnas) deben tener todos sus valores, o lo que es lo mismo, no debe haber celdas en blanco.
Ejemplo de relación que no cumple la primera forma normal
S# |
P# |
QTY |
s1 |
p1 |
300 |
|
p2 |
200 |
|
p3 |
400 |
s2 |
p1 |
200 |
|
p2 |
100 |
Ejemplo de relación que si cumple la primera forma normal
S# |
P# |
QTY |
s1 |
p1 |
300 |
s1 |
p2 |
200 |
s1 |
p3 |
400 |
s2 |
p1 |
200 |
s2 |
p2 |
100 |
|
-
Descripción
- Una relación es segunda forma normal si y solo si:
- Es primera forma normal.
- Cualquier atributo (columna) no perteneciente a una clave (primaria o extranjera) tiene dependencia funcional total de la clave primaria, es decir, que a cada valor de dicho atributo solo le corresponde un valor de la clave primaria.
Ejemplo de relación que no cumple la segunda forma normal
S# |
P# |
QTY |
s1 |
p1 |
300 |
s1 |
p2 |
200 |
s1 |
p3 |
400 |
s2 |
p1 |
200 |
s2 |
p2 |
100 |
Como puede verse, p1 tiene dos valores distintos (300 y 200), por lo cual no cumple la dependencia funcional total. Lo mismo ocurriría con p2.
Ejemplo de relación que si cumple la segunda forma normal
S# |
P# |
QTY |
s1 |
p1 |
300 |
s1 |
p2 |
200 |
s1 |
p3 |
400 |
s2 |
p1 |
300 |
s2 |
p2 |
200 |
|
-
Descripción
- Una relación es tercera forma normal si y solo si:
- Es segunda forma normal.
- Los atributos (columna) no pertenecientes a una clave (primaria o extranjera) son mutuamente independientes funcionalmente.
Ejemplo de relación que no cumple la tercera forma normal
S# |
Status |
City |
s1 |
20 |
London |
s1 |
10 |
Paris |
s3 |
10 |
Paris |
s4 |
20 |
London |
s5 |
30 |
Atenas |
Como puede verse, status
y City presentan dependencia
funcional total, por lo cual esta relación no cumple la tercera forma normal.
Ejemplo de relación que si cumple la tercera forma normal
S# |
Status |
City |
s1 |
20 |
London |
s1 |
10 |
Paris |
s3 |
10 |
Granada |
s4 |
20 |
Madrid |
s5 |
30 |
Atenas |
|
-
Descripción
- Una relación es cuarta forma normal si y solo si:
- Es forma normal de BCNF.
- Para toda la dependencia multivalor todos los atributos (columna) distintos de A dependen funcionalmente de A, es decir, A es clave.
- Es decir, si la relación es BCNF y las únicas dependencias
multivalor permitidas son las definidas sobre las claves candidatas, entonces se cumple.
|
-
Descripción
- Una relación es quinta forma normal si y solo si:
- Cada dependencia de JOIN que exista en dicha relación está implicada exclusivamente por claves candidatas.
|
-
Normalización de relaciones con más de una clave candidata (BCNF)
- Aun siendo formas 3 Normal pueden aparecer problemas en una relación si esta presenta más de una clave.
- Para resolver estos problemas recurrimos a la forma normal de Boyce y Codd (BCNF).
- Llamaremos determinante al atributo o conjunto de estos del cual depende funcionalmente algún otro atributo de la relación.
- Se dice que una relación está en forma normalizada de Boyce y Codd si y solo si cada determinante es una clave candidata.
- Toda forma BCNF es también 3ª forma normal, pero no a la inversa.
Ejemplo de relación que no es BCNF
s# |
sname |
p# |
qty |
s1 |
smith |
p1 |
300 |
s1 |
smith |
p2 |
200 |
s1 |
smith |
p3 |
400 |
s1 |
smith |
p4 |
200 |
s1 |
smith |
p5 |
100 |
s1 |
smith |
p6 |
100 |
s2 |
jones |
p1 |
300 |
s2 |
jones |
p2 |
400 |
s3 |
clark |
p2 |
200 |
s4 |
brown |
p2 |
200 |
s4 |
brown |
p4 |
300 |
s4 |
brown |
p5 |
400 |
- Esta relación no es BCNF porque tiene como determinantes: s#; sname; s#,p# y sname#p#.
- Y como claves tiene: s#,p# y sname,p#.
- Como ambos conjuntos no coinciden no se cumple la normalidad BCNF.
- Sin embargo, en el siguiente ejemplo, esa misma tabla dividida en las dos siguientes unidas mediante un JOIN si serían normales BCNF.
Ejemplo de relación que es BCNF
s# |
p# |
qty |
s1 |
p1 |
300 |
s1 |
p2 |
200 |
s1 |
p3 |
400 |
s1 |
p4 |
200 |
s1 |
p5 |
100 |
s1 |
p6 |
100 |
s2 |
p1 |
300 |
s2 |
p2 |
400 |
s3 |
p2 |
200 |
s4 |
p2 |
200 |
s4 |
p4 |
300 |
s4 |
p5 |
400 |
JOIN
s# |
sname |
s1 |
smith |
s2 |
jones |
s3 |
clark |
s4 |
brown |
- De esta forma la primera tabla tendría como determinante s#,p# y como clave s#,p#.
- La segunda tabla tendría como determinantes s# y sname.
- Como clave tendría s#,p#, por lo cual esta tabla cumple la normalidad BCNF, al igual que ocurre con la primera.
|
-
Dependencias
-
Descripción
- En una relación un atributo X es funcionalmente dependiente de otro Y si y solo si para cada valor de Y hay un único valor de X.
- Por ejemplo: La persona es funcionalmente dependiente del DNI.
DNI |
Persona |
1000001 |
Pepe López |
1000002 |
Juan Martín |
1000003 |
Marisa Puertas |
Esta dependencia funcional no tiene porque darse solo entre atributos (columnas) aislados, sino que también puede darse entre grupos de atributos.
|
-
Descripción
- Se dice que un atributo/grupo de atributos Y tienen dependencia funcional total del grupo de atributos X si y solo si depende funcionalmente de X pero no depende funcionalmente de ningún subconjunto de atributos de X distinto del total.
- Por ejemplo: Status y city dependen funcionalmente de s#,p# pero como también dependen funcionalmente de s# no tienen dependencia funcional total de s#,p#.
S# |
Status |
City |
P# |
QTY |
s1 |
20 |
London |
p1 |
300 |
s1 |
20 |
London |
p2 |
200 |
s1 |
20 |
London |
p3 |
400 |
s1 |
20 |
London |
p4 |
200 |
s1 |
20 |
London |
p5 |
100 |
s1 |
20 |
London |
p6 |
100 |
s2 |
10 |
Paris |
p1 |
300 |
s2 |
10 |
Paris |
p2 |
400 |
s3 |
10 |
Paris |
p2 |
200 |
s4 |
20 |
London |
p2 |
200 |
s4 |
20 |
London |
p4 |
300 |
s4 |
20 |
London |
p5 |
400 |
|
-
Descripción
- También pueden aparecer dependencias multivalor, caso aplicable exclusivamente a relaciones con al menos tres atributos.
- Se dice que en una relación con atributos A, B y C (estos atributos también pueden ser compuestos) existe dependencia multivalor entre los atributos A y B cuando tomada cualquier pareja de valores A,C de la relación el conjunto de valores de B que acompañan a esa pareja en cualquier tupla (columna) de la relación solo depende funcionalmente del valor de A y no depende funcionalmente del valor de C.
- Esta dependencia se representa: A -> B|C
- Ejemplo de dependencia multivalor:
Asignatura |
Profesor |
Lección |
Física |
López |
Mecánica |
Física |
López |
Óptica |
Física |
Martín |
Mecánica |
Física |
Martín |
Óptica |
Física |
Moral |
Mecánica |
Física |
Moral |
Óptica |
Matemáticas |
Antón |
Álgebra |
Matemáticas |
Antón |
Geometría |
Asignatura --> profesor|lección
Asignatura -/-> profesor|lección
|
-
Descripción
- En ocasiones, no nos basta con realizar la descomposición de una relación y unirla mediante un JOIN para recomponerla, sino que es necesario descomponerla en tres o mas relaciones.
- Existe entonces la llamada independencia de JOIN, en la cual sean X, Y, ... Z un subconjunto del conjunto de atributos de una relación R.
- Se dice que la relación satisface la dependencia de JOIN si y solo si la relación R queda recompuesta a su estado original efectuando el JOIN de las relaciones obtenidas proyectando R en X, Y... Z respectivamente.
- Por ejemplo: descomponemos la relación SPJ en tres realciones:
SPJ
s# |
p# |
j# |
s1 |
p1 |
j2 |
s1 |
p2 |
j1 |
s2 |
p1 |
j1 |
s1 |
p1 |
j1 |
s# |
p# |
j# |
s1 |
p1 |
j2 |
s1 |
p1 |
j1 |
s1 |
p2 |
j1 |
s2 |
p1 |
j2 |
s2 |
p1 |
j1 |
Si con esta tabla realizamos un JOIN con JS sobre j#,s# volveremos a la tabla original:
SPJ
s# |
p# |
j# |
s1 |
p1 |
j2 |
s1 |
p2 |
j1 |
s2 |
p1 |
j1 |
s1 |
p1 |
j1 |
|
-
Es aconsejable...
- Que todas las relaciones sean de la 1ª forma normal.
- Tomar las proyecciones (columnas) que aseguren la eliminación de las dependencias funcionales en las que los determinantes no sean al mismo tiempo claves candidatas, es decir, obtención de relaciones BCNF.
- Tomar proyecciones de estas relaciones BCNF que aseguren la eliminación de las dependencias multivalor que no se produzcan sobre claves candidatas. Es decir, obtención de relaciones 4ª forma normal.
- Tomar proyecciones de estas relaciones 4ª forma normal que aseguren la eliminación de las dependencias de JOIN que no estén exclusivamente involucradas por las claves candidatas.
|
Página generada automáticamente desde la Base de Datos: BDatosVarios/ el 27/5/2008 19:49:00