Normalización - script

From Ibbddunq

Revision as of 21:13, 2 October 2009 by Carlos (Talk | contribs)
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)

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 398 - me gusta la notación

  X ->> Y | Z    (1)

Explicarla bien despacito con el ejemplo motivador. Ver el método para descubrir MVDs. Como yo lo veo, si tengo un candidato, "pivoteo" sobre el posible X en (1) y se ve más o menos claro (creo).

  • entenderla despacito, hay tres casos para f1 y f2
    1. son la misma fila
    2. coinciden en Y
    3. no pasa ninguna de las anteriores
  • Observar que FD => MVD

Ver cómo partir una MVD para llegar a 4FN - página 401 Si X ->> Y | Z, parto en (X U Y) por un lado, (R - Y) = (X U Z) por el otro.

Para qué me sirve el concepto de MVD

  • para seguir partiendo tablas que no tienen FDs pero que no están bien.
  • para resolver "casos raros" de FDs que no son exactamente ni parciales ni transitivas ni adecuadas (ver ejemplo que sigue).


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>
Personal tools