Normalización - script
From Ibbddunq
Contents |
Enganche con el Navathe 5ta edición
Este tema está cubierto por los caps 10 y 11. Este curso incluye específicamente el material en:
- 10.1
- 10.2.1 y 10.2.2
- 10.3
- 10.4
- 11.1, excepto la parte de definiciones formales y algoritmos
- intro a 11.3, 11.3.1, 11.3.3
Motivación
En el curso vimos una forma de llegar al esquema de una BD relacional: arrancar por un MER y traducirlo. Hay otras formas, p.ej. armar una bolsa con todos los atributos que quiero y después ir separándolos en tablas.
P.ej. te dicen ... (o bien artista y trailer, o bien funcion / formaParte / acto).
¿Es correcta esta base? Si les preguntan por qué no, ¿qué dirían, cómo lo justificarían? A partir de estos atributos, ¿cómo armarían un esquema de BD que tenga la misma info y que esté bien?
Hoy vamos a hablar de
- criterios de calidad de esquemas de BD, que se suman a las anomalías y restricciones de integridad que vimos al estudiar MR.
- cómo transformar un esquema en otro que sí cumpla con las restricciones de calidad adicionales.
O sea, estas restricciones también las vamos a garantizar sin necesidad de programa.
Si armamos primero el MER y después lo traducimos a MR con las reglas que vimos, la BD que resulta cumple las restricciones que vamos a ver; o sea, una buena manera de armar un esquema de MR, es armarlo en MER y después pasarlo; o hacerlo directamente en MR, pero pensar en "cómo sería el MER de esta parte" ante dudas.
Un poco para verificar que una traducción MER -> MR quedó OK, y bastante porque hay mucha gente en el mundo que no sabe MER, vamos a estudiar estos criterios de calidad y las formas de ir mejorando el esquema de una BD.
Criterio de calidad fundamental - semántica
Cuando arman un esquema de BD, para cada tabla que les quedó deberían ser capaces de responder en forma sencilla a alguna de estas dos preguntas
- ¿qué representa cada fila?
- ¿qué quiere decir que la tabla incluya una fila con ciertos valores?
Ver ejemplos del circo.
Anomalías y pautas informales
Anomalías de actualización (págs 340 a 343)
trabajar con el ejemplo de tabla funcion + formaParte, lo podemos comprimir un poco p.ej.
<dia,ciudad,precioEntr,nomActo,dur>
- de inserción: no sabés qué insertar (función sin actos asignados) y/o tenés que meter algunos valores iguales que otra fila, (2do acto de una función).
- de eliminación: había programado un solo acto para una función, me arrepiento, borro la fila correspondiente.
- de modificación: si cambio un dato de una función (ponele que aumento la entrada), lo tengo que cambiar en todos los formaParte para la misma función.
2. pautas, que vienen a atacar los mismos problemas
- no mezclar atributos de distintas entidades en la misma tabla.
- que no quede info repetida excepto FKs.
- los enganches deben ser FK-PK, ponele que partís la tabla anterior en
<dia,ciudad,precioEntr> <ciudad,nomActo,dur>
acá estamos enganchando por ciudad, lo que es cualquiera. Y se pueden dar filas espurias (spurious tuples, pág 344 a 346). P.ej. esta tabla
12/08 Córdoba 30 leones 21 12/08 Córdoba 30 mono 9 15/08 Córdoba 14 payaso 30 15/08 Córdoba 14 malabares 15 20/08 Rosario 32 cuchillos 12 20/08 Rosario 32 hombreBala 6 22/08 Rosario 14 acrobacia 18
se partiría así
12/08 Córdoba 30 Córdoba leones 21 15/08 Córdoba 14 Córdoba mono 9 20/08 Rosario 32 Córdoba payaso 30 22/08 Rosario 14 Córdoba malabares 15 Rosario cuchillos 12 Rosario hombreBala 6 Rosario acrobacia 18
y si hago el join de estas dos sobran cosas
Dependencias funcionales
Definición:
X -> Y si t1(X) = t2(X) => t1(Y) = t2(Y)
A partir de este concepto podemos definir
- superclave de una tabla
- clave de una tabla
Las 6 reglitas - pág 350. Nota sobre esto: en 200901 sí las conté, y fueron realmente útiles.
Formas normales
Qué son: restricciones de calidad que ayudan a que no se puedan producir anomalías. O sea, si un esquema de BD cumple con la restricción xFN (veremos x de 1 a 4), cuanto más alto el x, más hay que ingeniarse para que que haya anomalías.
Hay varias formas de definirlas, más o menos equivalentes. Nosotros nos quedamos con lo que sigue porque creemos que es la forma en que se entienden mejor.
1FN: sin repeticiones.
2FN: 1FN + sin dependencias parciales.
3FN: 2FN + sin dependencias transitivas.
Cómo trabajar un esquema para ir subiendo la FN
- parcial, ponele clave A+B y A determina C. Se crea una nueva tabla A U C+, se saca C+ de la tabla original, A es una FK a la nueva tabla. Acá "C+" quiere decir: C más lo que depende de C. Ejemplos:
<funcion,acto,ciudad,provincia,gradoPel>
acá tengo dos dependencias parciales, una con acto y otra con ciudad. Cuando se va la ciudad, también se va la provincia que depende de la ciudad.
- transitiva, ponele A determina B y B determina C. Se van B U C+ a otra tabla, se tacha C+ de la tabla original, B es una FK a la nueva tabla. Ejemplo:
<funcion,ciudad,provincia>
Dependencias multivaluadas y cuarta forma normal
Justificar por qué existen y contar qué son las dependencias multivaluadas. Ejemplo motivador
<funcion, acto, boletero>
en una función se dan muchos actos y trabajan muchos boleteros.
- Armar la tabla ejemplo, ver las anomalías.
- Ver que al ser todo PK, necesariamente estamos en 3FN.
Definición de dependencia multivaluada - página 400 - me gusta la notación
X ->> Y | Z (1)
- entenderla despacito, hay tres casos para f1 y f2
- son la misma fila
- coinciden en Y
- no pasa ninguna de las anteriores
- Observar que FD => MVD
Ver cómo partir una MVD para llegar a 4FN - página 401
Como yo lo veo, si tengo un candidato, "pivoteo" sobre el posible X en (1) y se ve más o menos claro (creo).
Si X ->> Y | Z, parto en (X U Y) por un lado, (R - Y) = (X U Z) por el otro.
Un caso más complicado que también sale con MVD
Tomemos este caso
<funcion, ciudad, provincia, censo, poblacion>
con pk funcion, censo, y con dependencias
funcion -> ciudad ciudad -> provincia ciudad, censo -> poblacion
acá, la dependencia (ciudad, censo -> poblacion) es "medio parcial" y también transitiva. ¿Qué hacemos?
1. Seguro que podemos separar la dependencia
ciudad -> provincia
que es transitiva. Nos queda
<ciudad, provincia> <funcion, ciudad, censo, poblacion>
2. Vemos que
ciudad ->> funcion | {censo,poblacion}
Pensar este caso
funcion ciudad censo poblacion 18/05 Azul 1970 60000 19/05 Azul 1980 75000
(pivoteo como aprendí para analizar MVD). Se ve que hacen falta las otras dos filas
18/05 Azul 1980 75000 19/05 Azul 1970 60000
entonces queda
<funcion,ciudad> <ciudad,censo,poblacion> <ciudad,provincia>