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.
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:
fuente
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!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 ...
fuente
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í.
fuente