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

277

En el diseño de bases de datos relacionales, existe un concepto de normalización de la base 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, le pido a alguien que escriba una explicación más fácil de entender basada en ejemplos sobre lo que significan 1NF, 2NF, 3NF, incluso 3.5NF (Boyce-Codd).

barfoon
fuente

Respuestas:

435

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

2NF y 3NF tienen que ver con depender de la clave primaria. Recuerde que una clave primaria puede estar compuesta por múltiples columnas. Como Chris dijo en su respuesta:

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

2NF

Supongamos que tiene una tabla que 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 no está 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 ID del curso, pero no tiene nada que ver con el semestre en el que se lleva. Por lo tanto, como puede ver, tenemos información duplicada: varias filas nos dicen que IT101 está programando e IT102 son bases de datos. Así que arreglamos eso moviendo el nombre del curso a otra tabla, donde CourseID es la clave ENTERA.

Primary Key |

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

¡Sin redundancia!

3NF

Bien, 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, con suerte, debería ser obvio que TeacherName depende de TeacherID, por lo que esto no está en 3NF . Para solucionar esto, hacemos lo mismo que hicimos en 2NF: tome el campo TeacherName de esta tabla y colóquelo en su propio nombre, que tiene TeacherID como clave.

 Primary Key |

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

¡Sin redundancia!

Una cosa importante para recordar es que si algo no está en 1NF, tampoco está en 2NF o 3NF. Por lo que cada Forma Normal adicional requiere todo lo que las formas normales más bajos tenían, además de algunas condiciones adicionales, que deben todos ser cumplidas.

Smashery
fuente
9
Solo piense en términos de la relación entre las cosas. Si le pregunto "¿cómo se llama el curso con ID IT101?", Puede darme una respuesta, ¿verdad? Del mismo modo, si le pregunto "¿qué maestro tiene la ID 332?" puedes decirme qué maestro es ese. Por lo tanto, el nombre del curso depende de su ID.
Smashery
9
Sin embargo, no puede ir hacia otro lado, si le preguntara "¿Cuál es la identificación del Sr. Jones?" Es posible que no pueda dar una respuesta única, ya que puede haber dos Sr. Joneses. Por lo tanto, la ID no depende del nombre: es el nombre que depende de la ID.
Smashery
2
También puede pensarlo de esta manera: mire la tercera tabla hacia abajo (la primera con TeacherName). ¿Qué me impide tener "Mr Jones" en la primera fila, pero luego poner "Mr Bloggs" en la segunda fila? No debería permitirme hacer eso, porque ambos tienen la identificación de 332.
Smashery
30
@instantsetsuna - Explicación completa: en algunos tribunales, se le pregunta a un testigo si dice "La verdad, toda la verdad y nada más que la verdad, así que ayúdame Dios"; ya que Dios se considera el que tiene autoridad cuando se trata de saber si estás diciendo la verdad. En el caso de las bases de datos, podemos decir "Los datos dependen de la clave, la clave completa y nada más que la clave, así que ayúdame Codd". Ted Codd es el que se le ocurrió la idea de bases de datos relacionales: cosas que dependen de claves, etc., por lo que sería la autoridad a seguir en el caso de las bases de datos relacionales.
Smashery
55
@Smashery ¿Cuál es la diferencia entre 2NF y 3NF?
Zo tiene el
119

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], la clave completa [2NF] y nada más que la clave [3NF].

Chris Shaffer
fuente
72
... así que ayúdame Codd. en.wikipedia.org/wiki/Ted_Codd
Smashery
66
Entonces, ¿cuál es la diferencia entre The data depends on the key [1NF], nothing but the key [3NF]? ¡No nos confunda, ya que la respuesta de 1 frase no aclara la respuesta, pero confunde a los visitantes!
Pratik
2
"cada celda de una tabla debe contener solo una pieza de información y no puede haber filas duplicadas". - No veo cómo "Los datos dependen de la clave" coincide con todo eso.
Simon Forsberg
46

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

1NF: su tabla está organizada como un conjunto de datos desordenado y no hay columnas repetidas.

2NF: No repite datos en una columna de su tabla debido a otra columna.

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

Para más detalles, ver wikipedia ...

Dave Markle
fuente
1
Por lo que puedo decir, la evasión de grupos repetidos de 1NF no se refiere a columnas repetidas, sino a columnas individuales que representan un número arbitrario de valores repetidos para el mismo atributo, es decir, no son atómicas. Baso esto en, por ejemplo, (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
underscore_d
34

1NF: solo un valor por columna

2NF: todas las columnas de clave no primaria en la tabla deben depender de la clave primaria completa.

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 aquí.

Arcturus
fuente
Porque no proporcionaste atribución. He editado la respuesta para proporcionar atribución.
Robert Harvey
Siempre que sea posible, incluya el ejemplo en la respuesta misma. Un usuario ocasional debería poder leer su respuesta y obtener algún valor sin tener que hacer clic en el enlace del blog. La respuesta debe ser autónoma, en otras palabras.
Robert Harvey
Lo tendré en cuenta. Gracias :)
Arcturus
3
También tenga en cuenta que esta pregunta tiene dos años y ya tiene una respuesta altamente votada que fue marcada como aceptada por el OP. Las respuestas tardías son examinadas más cuidadosamente por la comunidad para evaluar si agregan o no un valor adicional genuino al OP.
Robert Harvey
3
@Arcturus leyó el artículo, siendo una de las mejores explicaciones para la normalización.
Olian04