Normalización - 2NF vs 3NF

Luchando por ver las diferencias entre ellos. Sé que decimos que 2NF es "la clave completa" y 3NF "nada más que la clave".

Haciendo referencia a esta gran respuesta de Smashery: ¿Qué son 1NF, 2NF y 3NF en el diseño de bases de datos?

El ejemplo utilizado para 3NF es exactamente el mismo que 2NF: es un campo que depende de un solo atributo clave. ¿En qué se diferencia el ejemplo de 3NF del de 2NF?

Muchas Gracias

preguntado el 16 de mayo de 11 a las 20:05

La violación 2NF se debe a que Course Name columna depende de parte de la clave (CourseID). La violación 3NF se debe a TeacherName es funcionalmente dependiente de TeacherID pero esto no es parte de la clave. -

Entonces, una tabla en 2NF podría tener CourseID, Semester, #Places, TeacherID, TeacherName? Parece extraño considerando TeacherName es claramente datos duplicados de TeacherID. -

Si. 2NF solo se ocupa de las dependencias funcionales de la clave parcial. Si la tabla está en 1NF y no tiene una clave compuesta que AFAIK, automáticamente está en 2NF. -

@Martin Creo que te mereces la respuesta correcta para tu comentario rápido, pero sin ella como respuesta real, ¡no puedo darte esto! -

Decir "TeacherName depende funcionalmente de TeacherID" es una cosa. Decir "TeacherName es claramente datos duplicados de TeacherID" es algo muy diferente. Sería bueno que intentara comprender la diferencia. -

5 Respuestas

Suponga que alguna relación satisface una dependencia funcional no trivial de la forma A-> B, donde B es un atributo no principal.

2NF se viola si A no es una superclave pero es un subconjunto adecuado de una clave candidata

3NF se viola si A no es una superclave

Ha notado que el requisito de 3NF es solo un caso especial (pero no tan especial) del requisito de 2NF. 2NF en sí mismo no es muy importante. La cuestión importante es si A es una superclave, no si A resulta ser una parte de una clave candidata.

Respondido 25 Jul 18, 15:07

+1, aunque puse una respuesta con la esperanza de que pudiera ayudar a Igor K si la tuya no es lo suficientemente sencilla. - Insensatez

3NF se viola si ni A es una superclave ni B es un atributo principal. - ً ً

Dado que hace una pregunta muy específica sobre una respuesta para existiendo así que pregunta aquí hay una explicación de eso (y básicamente diré lo que dportas ya dijo en su respuesta, pero con más palabras).

Los ejemplos de diseño que no está en 2NF y no en 3NF no son los mismos.

Sí, la dependencia en ambos casos está en un solo campo.

Sin embargo, en un ejemplo que no es 2NF:

  • la dependencia está en el parte de la clave primaria

mientras que en el ejemplo no 3NF (que está en 2NF):

  • la dependencia está en un campo que es no forma parte de la clave principal (y también observe que en ese ejemplo satisface 2NF; esto es para mostrar que incluso si verifica 2NF, también debe verificar 3NF)

En ambos casos, para normalizar, crearía una tabla adicional que no presentaría anomalías de actualización (ejemplo de anomalía de actualización: en el ejemplo de 2NF, ¿qué sucede si actualiza Coursename esperando IT101|2009-2, pero no para IT101|2009-1? Obtienes datos inconsistentes = sin sentido = inutilizables).

Entonces, si memorizas la clave, toda la clave y nada más que la clave, que cubre tanto 2NF como 3NF, que debería funcionar para usted en la práctica al normalizar. La distinción entre 2NF y 3NF puede parecerle sutil (pregunte si en la dependencia adicional los atributos de los que dependen los datos son parte de la clave candidata o no), y bueno, lo es, así que simplemente acéptelo.

contestado el 23 de mayo de 17 a las 15:05

2NF permite que los atributos no primos dependan funcionalmente de los atributos no primos

, pero

3NF permite que los atributos no primos dependan funcionalmente solo de la superclave

Por lo tanto, cuando una tabla está en 3NF, está en 2NF y 3NF es más estricta que 2NF.

Espero que esto ayude...

contestado el 06 de mayo de 15 a las 13:05

Ha logrado el 3er NF cuando no hay relaciones entre la clave y otras columnas que no dependen de ella.

No estoy seguro de que mi profesor hubiera dicho eso así, pero esto es lo que es.

Si estás "en el campo". Olvídate de las definiciones. Busque las "mejores prácticas". Uno es SECO: no se repita.

Si sigue ese principio, ya domina todo lo que necesita para NF.

Aquí hay un ejemplo. Su tabla tiene el siguiente esquema:

PERSONS : id, name, age, car make, car model

La edad y el nombre están relacionados con la entrada de la persona (=> id) pero el modelo depende del coche y no de la persona.

Luego, lo dividiría en dos tablas:

PERSONS : id, name, age, car_models_id (references CAR_MODELS.id)
CAR_MODELS : id, name, car_makes_id (references CAR_MAKES.id)
CAR_MAKES : id, name

Puede tener replicación en 2FN pero ya no en 3FN.

La normalización tiene que ver con la no replicación, la coherencia y, desde otro punto de vista, claves externas y JOIN.

Cuanto más normalizado, mejor para los datos, pero no para el rendimiento ni para la comprensión, si se vuelve demasiado complicado.

contestado el 17 de mayo de 11 a las 15:05

Gracias, estoy de acuerdo con el principio DRY, por lo que me sorprendió ver la duplicación de datos en el 2NF. - Marcus

"Ha logrado el 3er NF cuando no hay relaciones entre la clave y las otras columnas". No estoy muy seguro de lo que quiere decir con esa frase, pero estoy seguro de que está mal. ¡Estar en 3NF no tiene nada que ver con que no haya "relaciones [sic]" entre la clave y otras columnas! - nvogel

Si alguien estuviera "en el campo" de, digamos, la construcción de puentes, ¿le aconsejaría también que "se olvidara de las definiciones" de, digamos, las leyes de la gravitación? - Erwin Smout

user753136, ¿Realmente no ve el sentido del comentario de Erwin? Un ingeniero debe conocer las fórmulas que definen las fuerzas que actúan sobre un puente. Sin ese conocimiento, puede estimar cuándo se romperá, pero no lo sabrá con certeza. De manera similar, los NF son un método formal para evaluar la precisión del diseño de una base de datos frente a un conjunto de dependencias. La redundancia en el diseño de la base de datos puede ser bastante sutil y simplemente decir DRY no es suficiente para asegurarse de identificar todos los problemas posibles. Su consejo de "olvidar las definiciones" no es de ninguna ayuda. ¿Por qué la ignorancia sería una ventaja? - nvogel

@ user753136, su consejo de preferir las mejores prácticas a las teorías y definiciones es confuso, ya que en el diseño de bases de datos relacionales todas las buenas prácticas provienen de la teoría. Comprender la teoría y las definiciones lo ayuda a comprender las razones de las 'mejores prácticas' y le brinda herramientas de pensamiento mucho más poderosas. - Insensatez

2NF sigue la dependencia parcial mientras que 3NF sigue la dependencia funcional transitiva. Es importante saber que el 3NF debe estar en 2NF y soportar la dependencia funcional transitiva.

Respondido el 20 de diciembre de 17 a las 18:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.