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.