web-dev-qa-db-fra.com

Normalisation - 2NF vs 3NF

Luttant pour voir les différences entre eux. Je sais que nous disons que 2NF est "la clé entière" et 3NF "rien que la clé".

Référencement de cette bonne réponse par Smashery: Que sont 1NF, 2NF et 3NF dans la conception de bases de données?

L'exemple utilisé pour 3NF est exactement le même que 2NF - c'est un champ qui dépend d'un seul attribut de clé. En quoi l'exemple pour 3NF est-il différent de celui pour 2NF?

Merci

24
Marcus

Supposons qu'une relation satisfasse une dépendance fonctionnelle non triviale de la forme A-> B, où B est un attribut non essentiel.

2NF est violé si A n'est pas une super clé mais est un sous-ensemble approprié d'une clé candidate

3NF est violé si A n'est pas une super clé

Vous avez remarqué que l'exigence 3NF n'est qu'un cas particulier (mais pas vraiment si spécial) de l'exigence 2NF. 2NF en soi n'est pas très important. La question importante est de savoir si A est une super-clé, pas si A se trouve être simplement une partie d'une clé candidate.

12
nvogel

Puisque vous posez une question très précise sur une réponse pour existant, alors question voici une explication à cela (et fondamentalement, je dirai ce que dportas a déjà dit dans sa réponse, mais en plus de mots).

Les exemples de conception qui ne sont ni dans 2NF ni dans 3NF ne sont pas les mêmes.

Oui, la dépendance dans les deux cas est sur un seul champ.

Cependant, dans un exemple non 2NF:

  • la dépendance est sur le partie de la clé primaire} _

en exemple non 3NF (qui est en 2NF):

  • la dépendance est sur un champ qui est ne fait pas partie de la clé primaire} (notez également que, dans cet exemple, satisfait à 2NF; ceci montre que même si vous vérifiez 2NF, vérifiez également pour 3NF)

Dans les deux cas à normaliser, vous créeriez une table supplémentaire qui ne présenterait pas d'anomalies de mise à jour (exemple d'anomalie de mise à jour: dans l'exemple 2NF, que se passera-t-il si vous mettez à jour Coursename pour IT101|2009-2, mais pas pour IT101|2009-1? Vous obtenez des données incohérentes = non significatives = inutilisables).

Donc, si vous mémorisez la clé, la clé entière et rien que la clé}, qui couvre à la fois 2NF et 3NF, cela devrait fonctionner dans la pratique lorsque vous normalisez. La distinction entre 2NF et 3NF peut vous sembler subtile (demandez-vous si, dans la dépendance supplémentaire, le ou les attributs sur lesquels reposent les données font partie de la clé candidate ou non) et, eh bien, si, acceptez-le.

8
Unreason

2NF permet aux attributs non principaux d'être fonctionnellement dépendants d'attributs non principaux

mais

3NF permet aux attributs non principaux d'être fonctionnellement dépendants uniquement de la super clé

Ainsi, quand une table est en 3NF elle est en 2NF et 3NF est plus stricte que 2NF

J'espère que cela t'aides...

7
Lordferrous

Vous avez atteint la 3ème NF quand il n'y a pas de relation entre la clé et d'autres colonnes qui n'en dépendent pas.

Je ne suis pas sûr que mon professeur l'aurait dit ainsi, mais c'est ce que c'est.

Si vous êtes "sur le terrain". Oubliez les définitions. Recherchez les "meilleures pratiques". L'un est DRY: ne vous répétez pas.

Si vous suivez ce principe, vous maîtrisez déjà tout ce dont vous avez besoin pour NF.

Voici un exemple . Votre table a le schéma suivant:

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

L'âge et le nom sont liés à l'entrée de la personne (=> id) mais le modèle dépend de la voiture et non de la personne.

Ensuite, vous le diviseriez en deux tables:

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

Vous pouvez avoir une réplication dans 2FN mais plus dans 3FN.

La normalisation concerne uniquement la non-réplication, la cohérence et, d'un autre point de vue, les clés étrangères et les jointures.

Plus vous normalisez, mieux ce sera pour les données, mais pas pour les performances, ni pour comprendre si cela devient vraiment trop compliqué.

2
tiktak

2NF suit la dépendance partielle alors que 3NF suit la dépendance fonctionnelle transitive. Il est important de savoir que le 3NF doit être en 2NF et prendre en charge la dépendance fonctionnelle transitive.

0
rashedcs