¿Qué son los formularios normales de la base de datos y puede dar ejemplos? [cerrado]


En el diseño de bases de datos relacionales, existe un concepto de normalización de bases de datos o simplemente normalización, que es un proceso de organización de columnas (atributos) y tablas (relaciones) para reducir la redundancia de datos y mejorar la integridad de los datos. (como está escrito en Wikipedia).

Como la mayoría de los artículos son algo técnicos y por lo tanto más difíciles de entender, estoy pidiendo a alguien que escriba una explicación más fácil de entender basada en ejemplos sobre lo que 1NF, 2NF, 3NF, incluso 3.5 NF (Boyce-Codd) significar.

Author: Jax, 2009-04-07

4 answers

1NF es la más básica de las formas normales - cada celda en una tabla debe contener solo una pieza de información, y no puede haber filas duplicadas.

2NF y 3NF tienen que ver con ser dependientes de la clave primaria. Recuerde que una clave primaria puede estar formada por varias columnas. Como dijo Chris en su respuesta:

Los datos dependen de la clave [1NF], toda la clave [2NF] y nada más que la clave [3NF] (así que ayúdame Codd).

2NF

Digamos que tienes una mesa contiene cursos que se toman en un semestre determinado, y tiene los siguientes datos:

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

Esto es no en 2NF, porque la cuarta columna no se basa en la clave completa, sino solo en una parte de ella. El nombre del curso depende de la identificación del Curso, pero no tiene nada que ver con el semestre que se toma. Por lo tanto, como puede ver, tenemos información duplicada - varias filas que nos dicen que IT101 está programando, y IT102 es Bases de datos. Así que arreglamos eso moviéndonos el nombre del curso en otra tabla, donde CourseID es la clave COMPLETA.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

No hay redundancia!

3NF

Bien, así que digamos que también agregamos el nombre del profesor del curso, y algunos detalles sobre ellos, en el RDBMS:

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

Ahora esperemos que sea obvio que TeacherName depende de TeacherID - así que esto es no en 3NF. Para arreglar esto, hacemos lo mismo que hicimos en 2NF-tomar el campo TeacherName de esta tabla, y ponerlo en su propio, que tiene TeacherID como la clave.

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

No hay redundancia!!

Una cosa importante a recordar es que si algo no está en 1NF, tampoco está en 2NF o 3NF. Así que cada Forma Normal adicional requiere todo que las formas normales inferiores tenían, más algunas condiciones adicionales, que deben cumplir todo.

 406
Author: Smashery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-31 01:12:21

Nunca he tenido una buena memoria para la redacción exacta, pero en mi clase de base de datos creo que el profesor siempre dijo algo como:

Los datos dependen de la clave [1NF], toda la clave [2NF] y nada más que la clave [3NF].

 109
Author: Chris Shaffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-07 02:53:01

Aquí hay una respuesta rápida, ciertamente masacrada , pero en una oración:

1NF : Su tabla está organizada como un conjunto desordenado de datos, y no hay columnas que se repitan.

2NF: No se repiten datos en una columna de la tabla debido a otra columna.

3NF: Cada columna en su tabla se relaciona solo con la clave de su tabla't no tendría una columna en una tabla que describa otra columna en su tabla que no sea la clave.

Para más detalle, ver wikipedia...

 43
Author: Dave Markle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-23 16:38:11

1NF: Solo un valor por columna

2NF: Todas las columnas de clave no primaria de la tabla deben depender de toda la clave primaria.

3NF: Todas las columnas de clave no primaria de la tabla deben depender DIRECTAMENTE de la clave primaria completa.

He escrito un artículo con más detalle sobre aquí

 27
Author: Arcturus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-18 02:13:30