Pregunta

En el diseño de base de datos relacional, hay un concepto de normalización de bases de datos o simplemente la normalización, que es un proceso de organización de las 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écnica y por lo tanto más difícil de entender, lo que estoy pidiendo a alguien para escribir una más fácil de entender la explicación basada en ejemplos sobre lo 1NF, 2NF, 3NF, incluso 3.5NF (Boyce-Codd) significa.

¿Fue útil?

Solución

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

2NF y 3NF son todos acerca de ser dependiente de la clave principal. Recordemos que una clave principal puede estar compuesta de varias columnas. Como dijo Chris en su respuesta:

Los datos depende de la tecla [1NF], toda la tecla [2NF] y nada más que la tecla [3NF] (por lo que me Codd ).

2NF

Supongamos que tiene una tabla que contiene los cursos que se toman en un determinado semestre, 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   |

Este es no en 2NF , debido a que la cuarta columna no se basa en el toda clave - pero sólo una parte de ella. El nombre del curso depende de la ID del curso, pero no tiene nada que ver con lo que el semestre se toma en tanto, como se puede ver, tenemos información duplicada -. Varias filas que nos dice que IT101 es la programación, y IT102 es Bases de datos. Así que arreglar esto moviendo el nombre del curso en otra mesa, donde courseid es la clave completa.

Primary Key |

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

Sin redundancia!

3NF

De acuerdo, así que digamos añadimos también el nombre del profesor del curso, y algunos detalles acerca de 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 es de esperar que debería ser obvio que TeacherName depende de TeacherID - por lo que este es no en 3NF . Para solucionar esto, hacemos lo mismo que hicimos en 2NF -. TeacherName salir al campo de esta tabla, y lo puso en su propia, que tiene TeacherID como la clave

 Primary Key |

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

Sin redundancia !!

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

Otros consejos

Nunca he tenido una buena memoria para palabras exactas, pero en mi clase de base de datos Creo que el profesor siempre decía algo como:

  

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

Aquí hay una rápida, es cierto masacrados respuesta, pero en una frase:

1NF:. Su tabla está organizada como una desordenada set de los datos, y no hay repetición de columnas

2NF: no repetir los datos en una columna de la tabla porque de otra columna.

3NF: Cada columna de la tabla se refiere únicamente al de su tabla de claves - que no tendría una columna en una tabla que describe otra columna de la tabla, que no es la clave.

Para más detalles, véase Wikipedia ...

1NF: Sólo un valor por columna

2NF:. Todas las columnas de clave principal de la tabla no debe depender de toda la clave principal

3NF:. Todas las columnas de clave principal no en la mesa deben depender directamente de toda la clave principal

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top