Sesión Nº 7 - Formas Normales

download Sesión Nº 7 - Formas Normales

of 13

Transcript of Sesión Nº 7 - Formas Normales

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    47

    7. NOMALIZACIN DE BASE DE DATOS

    La normalizacin es el proceso de organizar los datos de una base de datos.

    Se incluye la creacin de tablas y el establecimiento de relaciones entre ellas

    segn reglas diseadas tanto para proteger los datos como para hacer que la

    base de datos sea ms flexible al eliminar la redundancia y las dependencias

    incoherentes.

    Los datos redundantes desperdician el espacio de disco y crean problemas de

    mantenimiento. Si hay que cambiar datos que existen en ms de un lugar, se

    deben cambiar de la misma forma exactamente en todas sus ubicaciones. Un

    cambio en la direccin de un cliente es mucho ms fcil de implementar si los

    datos slo se almacenan en la tabla Clientes y no en algn otro lugar de la

    base de datos.

    Qu es una "dependencia incoherente"? Aunque es intuitivo para un usuario

    mirar en la tabla Clientes para buscar la direccin de un cliente en particular,

    puede no tener sentido mirar all el salario del empleado que llama a ese

    cliente. El salario del empleado est relacionado con el empleado, o depende

    de l, y por lo tanto se debera pasar a la tabla Empleados. Las dependencias

    incoherentes pueden dificultar el acceso porque la ruta para encontrar los datos

    puede no estar o estar interrumpida.

    Hay algunas reglas en la normalizacin de una base de datos. Cada regla se

    denomina una "forma normal". Si se cumple la primera regla, se dice que la

    base de datos est en la "primera forma normal". Si se cumplen las tres

    primeras reglas, la base de datos se considera que est en la "tercera forma

    normal". Aunque son posibles otros niveles de normalizacin, la tercera forma

    normal se considera el mximo nivel necesario para la mayor parte de las

    aplicaciones.

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

    ALUMNOHighlight

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    48

    Al igual que con otras muchas reglas y especificaciones formales, en los

    escenarios reales no siempre se cumplen los estndares de forma perfecta. En

    general, la normalizacin requiere tablas adicionales y algunos clientes

    consideran ste un trabajo considerable. Si decide infringir una de las tres

    primeras reglas de la normalizacin, asegrese de que su aplicacin se

    anticipa a los problemas que puedan aparecer, como la existencia de datos

    redundantes y de dependencias incoherentes.

    7.1. GRADOS DE NORMALIZACIN.

    Existen bsicamente tres niveles de normalizacin: Primera Forma Normal

    (1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal (3NF). Cada

    una de estas formas tiene sus propias reglas.

    Cuando una base de datos se conforma a un nivel, se considera normalizada a

    esa forma de normalizacin. No siempre es una buena idea tener una base de

    datos conformada en el nivel ms alto de normalizacin, puede llevar a un nivel

    de complejidad que pudiera ser evitado si estuviera en un nivel ms bajo de

    normalizacin.

    En la tabla siguiente se describe brevemente en que consiste cada una de las

    reglas, y posteriormente se explican con ms detalle.

    PRIMERA FORMA NORMAL.

    La regla de la Primera Forma Normal establece que las columnas repetidas

    deben eliminarse y colocarse en tablas separadas.

    Poner la base de datos en la Primera Forma Normal resuelve el problema de

    los encabezados de columna mltiples. Muy a menudo, los diseadores de

    ALUMNOHighlight

    ALUMNOHighlight

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    49

    bases de datos inexpertos harn algo similar a la tabla no normalizada. Una y

    otra vez, crearn columnas que representen los mismos datos. La

    normalizacin ayuda a clarificar la base de datos y a organizarla en partes ms

    pequeas y ms fciles de entender. En lugar de tener que entender una tabla

    gigantesca y monoltica que tiene muchos diferentes aspectos, slo tenemos

    que entender los objetos pequeos y ms tangibles, as como las relaciones

    que guardan con otros objetos tambin pequeos.

    Qu debe cumplir una relacin en su primera forma normal.

    Una relacin R se encuentra en 1FN si y solo s por cada rengln

    columna contiene valores elementales.

    Las celdas de las tablas poseen valores simples y no se permiten grupos

    ni arreglos repetidos como valores, es decir, contienen un solo valor por

    cada celda.

    Todos los ingresos en cualquier columna (atributo) deben ser del mismo

    tipo.

    Cada columna debe tener un nombre nico, el orden de las columnas en

    la tabla no es importante.

    Dos filas o renglones de una misma tabla no deben ser idnticas,

    aunque el orden de las filas no es importante.

    Elimine los grupos repetidos de las tablas individuales.

    Cree una tabla independiente para cada conjunto de datos relacionados.

    Identifique cada conjunto de datos relacionados con una clave principal.

    Se muestra un ejemplo E-R en

    su primera forma normal.

    Una relacin R se encuentra en 1FN si y solo s por cada

    rengln columna contiene valores elementales.

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    50

    Ejemplo 1:

    En esta Gua de Pedido, la PK es el Nro_GI (nmero de gua) quin determina

    a los dems atributos de la tabla.

    Ejemplo 2:

    En este caso de la biblioteca, la PK es el CodLibro, quin determina a los dems

    atributos de la tabla.

    SEGUNDA FORMA NORMAL.

    Una relacin R est en 2FN si y solo si est en 1FN y los atributos no primos

    dependen funcionalmente de la llave primaria.

    Cree tablas independientes para conjuntos de valores que se apliquen a

    varios registros.

    Relacione estas tablas con una clave externa.

    Los registros no deben depender de nada que no sea una clave principal de

    una tabla, una clave compuesta si es necesario. Por ejemplo, considere la

    direccin de un cliente en un sistema de contabilidad. La direccin se necesita

    en la tabla Clientes, pero tambin en las tablas Pedidos, Envos, Facturas,

    Cuentas por cobrar y Colecciones. En lugar de almacenar la direccin de un

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    51

    cliente como una entrada independiente en cada una de estas tablas,

    almacnela en un lugar, ya sea en la tabla Clientes o en una tabla Direcciones

    independiente.

    Represente funcionalmente la 2NF

    TERCERA FORMA NORMAL.

    Una tabla est normalizada en esta forma si todas las columnas que no son

    llave son funcionalmente dependientes por completo de la llave primaria y no

    hay dependencias transitivas. Comentamos anteriormente que una

    dependencia transitiva es aquella en la cual existen columnas que no son llave

    que dependen de otras columnas que tampoco son llave.

    Cuando las tablas estn en la Tercera Forma Normal se previenen errores de

    lgica cuando se insertan o borran registros. Cada columna en una tabla est

    identificada de manera nica por la llave primaria, y no deben haber datos

    repetidos. Esto provee un esquema limpio y elegante, que es fcil de trabajar y

    expandir.

    Un dato sin normalizar no cumple con ninguna regla de normalizacin. Para

    explicar con un ejemplo en que consiste cada una de las reglas, vamos a

    considerar los datos de la siguiente tabla.

    Los valores de un registro que no sean parte de la clave de ese registro no

    pertenecen a la tabla. En general, siempre que el contenido de un grupo de

    campos pueda aplicarse a ms de un nico registro de la tabla, considere

    colocar estos campos en una tabla independiente. Por ejemplo, en una tabla

    Contratacin de empleados, puede incluirse el nombre de la universidad y la

    direccin de un candidato. Pero necesita una lista completa de universidades

    Elimine los campos que no dependan de la clave.

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    52

    para enviar mensajes de correo electrnico en grupo. Si la informacin de las

    universidades se almacena en la tabla Candidatos, no hay forma de enumerar

    las universidades que no tengan candidatos en ese momento. Cree una tabla

    Universidades independiente y vinclela a la tabla Candidatos con el cdigo de

    universidad como clave.

    EXCEPCIN: cumplir la tercera forma normal, aunque en teora es deseable,

    no siempre es prctico. Si tiene una tabla Clientes y desea eliminar todas las

    dependencias posibles entre los campos, debe crear tablas independientes

    para las ciudades, cdigos postales, representantes de venta, clases de

    clientes y cualquier otro factor que pueda estar duplicado en varios registros.

    En teora, la normalizacin merece el trabajo que supone. Sin embargo,

    muchas tablas pequeas pueden degradar el rendimiento o superar la

    capacidad de memoria o de archivos abiertos.

    Una relacin R est en 3FN si y solo si est en 2FN y todos sus

    atributos no primos dependen no transitivamente de la llave

    primaria.

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    53

    EJEMPLO NORMALIZACION HASTA LA 3 FN:

    Estos pasos demuestran el proceso de normalizacin de una tabla de alumnos

    ficticia.

    1. Tabla sin normalizar:

    N alumno Tutor Despacho-Tut Clase1 Clase2 Clase3

    1022 Garca 412 101-07 143-01 159-02

    4123 Daz 216 201-01 211-02 214-01

    2. Primera forma normal: no hay grupos repetidos.

    Las tablas slo deben tener dos dimensiones. Puesto que un alumno

    tiene varias clases, estas clases deben aparecer en una tabla

    independiente. Los campos Clase1, Clase2 y Clase3 de los registros

    anteriores son indicativos de un problema de diseo.

    Las hojas de clculo suelen usar la tercera dimensin, pero las tablas no

    deberan hacerlo. Otra forma de considerar ese problema es con una

    relacin de uno a varios y poner el lado de uno y el lado de varios en

    tablas distintas. En su lugar, cree otra tabla en la primera forma normal

    eliminando el grupo repetido (N clase), segn se muestra a

    continuacin:

    N alumno Tutor Despacho-Tut N clase

    1022 Garca 412 101-07

    1022 Garca 412 143-01

    1022 Garca 412 159-02

    4123 Daz 216 201-01

    4123 Daz 216 211-02

    4123 Daz 216 214-01

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    54

    3. Segunda forma normal: eliminar los datos redundantes.

    Observe los diversos valores de N clase para cada valor de N alumno

    en la tabla anterior. N clase no depende funcionalmente de N alumno (la

    clave principal), de modo que la relacin no cumple la segunda forma

    normal.

    Las dos tablas siguientes demuestran la segunda forma normal:

    Alumnos:

    Registro:

    4. Tercera forma normal: eliminar los datos no dependientes de la clave

    En el ltimo ejemplo, Despacho-Tut (el nmero de despacho del tutor) es

    funcionalmente dependiente del atributo Tutor. La solucin es pasar ese

    atributo de la tabla Alumnos a la tabla Personal, segn se muestra a

    continuacin:

    Alumnos: Personal:

    N alumno Tutor Despacho-Tut

    1022 Garca 412

    4123 Daz 216

    N alumno N clase

    1022 101-07

    1022 143-01

    1022 159-02

    4123 201-01

    4123 211-02

    4123 214-01

    Nombre Habitacin Dept

    Garca 412 42

    Daz 216 42

    N alumno Tutor

    1022 Garca

    4123 Daz

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    55

    EJEMPLO APLICANDO LOS PASOS DE NORMALIZACION DE LA 1FN

    HASTA LA 4FN

    A travs del siguiente ejercicio se intenta afirmar los conocimientos de

    normalizacin con un ejemplo simplificado de una base de datos para una

    pequea biblioteca.

    CodLibro Titulo Autor Editorial NombreLector FechaDev

    1001 Variable compleja Murray Spiegel McGraw Hill Prez Gmez, Juan 15/04/2005

    1004 Visual Basic 5 E. Petroustsos Anaya Ros Tern, Ana 17/04/2005

    1005 Estadstica Murray Spiegel McGraw Hill Roca, Ren 16/04/2005

    1006 Oracle University Nancy Greenberg

    y Priya Nathan Oracle Corp. Garca Roque, Luis 20/04/2005

    1007 Clipper 5.01 Ramalho McGraw Hill Prez Gmez, Juan 18/04/2005

    Esta tabla no cumple el requisito de la Primera Forma Normal (1NF) de slo

    tener campos atmicos, pues el nombre del lector es un campo que puede (y

    conviene) descomponerse en apellido paterno, apellido materno y nombres. Tal

    como se muestra en la siguiente tabla.

    1NF

    CodLibro Titulo Autor Editorial Paterno Materno Nombres FechaDev

    1001 Variable

    compleja Murray Spiegel McGraw Hill Prez Gmez Juan 15/04/2005

    1004 Visual Basic 5 E. Petroustsos Anaya Ros Tern Ana 17/04/2005

    1005 Estadstica Murray Spiegel McGraw Hill Roca

    Ren 16/04/2005

    1006 OracleUniversity NancyGreenberg Oracle Corp. Garca Roque Luis 20/04/2005

    1006 OracleUniversity Priya Nathan Oracle Corp. Garca Roque Luis 20/04/2005

    1007 Clipper 5.01 Ramalho McGraw Hill Prez Gmez Juan 18/04/2005

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    56

    Como se puede ver, hay cierta redundancia caracterstica de 1NF.

    La Segunda Forma Normal (2NF) pide que no existan dependencias parciales

    o dicho de otra manera, todos los atributos no clave deben depender por

    completo de la clave primaria. Actualmente en nuestra tabla tenemos varias

    dependencias parciales si consideramos como atributo clave el cdigo del libro.

    Por ejemplo, el ttulo es completamente identificado por el cdigo del libro, pero

    el nombre del lector en realidad no tiene dependencia de este cdigo, por tanto

    estos datos deben ser trasladados a otra tabla.

    2NF

    CodLibro Titulo Autor Editorial

    1001 Variable compleja Murray Spiegel McGraw Hill

    1004 Visual Basic 5 E. Petroustsos Anaya

    1005 Estadstica Murray Spiegel McGraw Hill

    1006 Oracle University NancyGreenberg Oracle Corp.

    1006 Oracle University Priya Nathan Oracle Corp.

    1007 Clipper 5.01 Ramalho McGraw Hill

    La nueva tabla slo contendr datos del lector.

    Hemos creado una tabla para contener los datos del lector y tambin tuvimos

    que crear la columna CodLector para identificar unvocamente a cada uno. Sin

    embargo, esta nueva disposicin de la base de datos necesita que exista otra

    CodLector Paterno Materno Nombres

    501 Prez Gmez Juan

    502 Ros Tern Ana

    503 Roca

    Ren

    504 Garca Roque Luis

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    57

    tabla para mantener la informacin de qu libros estn prestados a qu

    lectores. Esta tabla se muestra a continuacin:

    Para la Tercera Forma Normal (3NF) la relacin debe estar en 2NF y adems

    los atributos no clave deben ser mutuamente independientes y dependientes

    por completo de la clave primaria. Tambin recordemos que dijimos que esto

    significa que las columnas en la tabla deben contener solamente informacin

    sobre la entidad definida por la clave primaria y, por tanto, las columnas en la

    tabla deben contener datos acerca de una sola cosa.

    En nuestro ejemplo en 2NF, la primera tabla conserva informacin acerca del

    libro, los autores y editoriales, por lo que debemos crear nuevas tablas para

    satisfacer los requisitos de 3NF.

    3NF

    CodLibro Titulo

    1001 Variable compleja

    1004 Visual Basic 5

    1005 Estadstica

    1006 Oracle University

    1007 Clipper 5.01

    CodLibro CodLector FechaDev

    1001 501 15/04/2005

    1004 502 17/04/2005

    1005 503 16/04/2005

    1006 504 20/04/2005

    1007 501 18/04/2005

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    58

    CodAutor Autor

    801 Murray Spiegel

    802 E. Petroustsos

    803 Nancy Greenberg

    804 Priya Nathan

    806 Ramalho

    CodEditorial Editorial

    901 McGraw Hill

    902 Anaya

    903 Oracle Corp.

    Aunque hemos creado nuevas tablas para que cada una tenga slo

    informacin acerca de una entidad, tambin hemos perdido la informacin

    acerca de qu autor ha escrito qu libro y las editoriales correspondientes, por

    lo que debemos crear otras tablas que relacionen cada libro con sus autores y

    editoriales.

    CodLibro codAutor

    1001 801

    1004 802

    1005 801

    1006 803

    1006 804

    1007 806

    CodLibro codEditorial

    1001 901

    1004 902

    1005 901

    1006 903

    1007 901

  • Taller de Base de Datos

    Normalizacin de Base de Datos

    59

    Y el resto de las tablas no necesitan modificacin.

    CodLector Paterno Materno Nombres

    501 Prez Gmez Juan

    502 Ros Tern Ana

    503 Roca Ren

    504 Garca Roque Luis

    CodLibro CodLector FechaDev

    1001 501 15/04/2005

    1004 502 17/04/2005

    1005 503 16/04/2005

    1006 504 20/04/2005

    1007 501 18/04/2005