Que sont les formulaires normaux de base de données et pouvez-vous donner des exemples? [fermé]


277

Dans la conception de bases de données relationnelles, il existe un concept de normalisation de base de données ou simplement de normalisation, qui est un processus d'organisation des colonnes (attributs) et des tables (relations) pour réduire la redondance des données et améliorer l'intégrité des données. (comme écrit sur Wikipedia ).

Comme la plupart des articles sont quelque peu techniques et donc plus difficiles à comprendre, je demande à quelqu'un d'écrire une explication plus facile à comprendre basée sur des exemples de ce que signifie 1NF, 2NF, 3NF, voire 3.5NF (Boyce-Codd).

Réponses:


435

1NF est le plus simple des formulaires normaux - chaque cellule d'un tableau ne doit contenir qu'un seul élément d'information et il ne peut y avoir de lignes en double.

2NF et 3NF sont tous dépendant de la clé primaire. Rappelons qu'une clé primaire peut être composée de plusieurs colonnes. Comme Chris l'a dit dans sa réponse:

Les données dépendent de la clé [1NF], de la clé entière [2NF] et rien que de la clé [3NF] (alors aidez-moi Codd ).

2NF

Supposons que vous ayez un tableau contenant les cours suivis au cours d'un certain semestre et que vous disposez des données suivantes:

|-----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   |

Ce n'est pas dans 2NF , car la quatrième colonne ne dépend pas de la clé entière - mais seulement d'une partie de celle-ci. Le nom du cours dépend de l'ID du cours, mais n'a rien à voir avec le semestre auquel il est inscrit. Ainsi, comme vous pouvez le voir, nous avons des informations en double - plusieurs lignes nous indiquant que IT101 est la programmation et IT102 est les bases de données. Nous corrigeons donc cela en déplaçant le nom du cours dans une autre table, où CourseID est la clé ENTIÈRE.

Primary Key |

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

Pas de redondance!

3NF

D'accord, disons que nous ajoutons également le nom de l'enseignant du cours et quelques détails à leur sujet dans le SGBDR:

|-----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   |

J'espère maintenant qu'il devrait être évident que TeacherName dépend de TeacherID - donc ce n'est pas dans 3NF . Pour résoudre ce problème, nous faisons à peu près la même chose que dans 2NF - retirez le champ TeacherName de ce tableau et mettez-le dans le sien, qui a TeacherID comme clé.

 Primary Key |

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

Pas de redondance !!

Une chose importante à retenir est que si quelque chose n'est pas dans 1NF, ce n'est pas dans 2NF ou 3NF non plus. Ainsi, chaque forme normale supplémentaire nécessite tout ce que possédaient les formes normales inférieures, plus quelques conditions supplémentaires, qui doivent toutes être remplies.


9
Pensez-y simplement en termes de relation entre les choses. Si je vous demande "quel est le nom du cours avec l'ID IT101?", Vous pouvez me donner une réponse, non? De même, si je vous demande "quel professeur a l'ID 332?" vous pouvez me dire de quel enseignant il s'agit. Ainsi, le nom du cours dépend de son ID.
Smashery

9
Cependant, vous ne pouvez pas aller dans l'autre sens - si je vous demandais "Quelle est la carte d'identité de M. Jones?" vous ne pourrez peut-être pas donner une réponse unique, car il peut y avoir deux M. Jones. Donc, l'ID ne dépend pas du nom - c'est le nom qui dépend de l'ID.
Smashery

2
Vous pouvez également y penser de cette façon - regardez le troisième tableau vers le bas (le premier avec TeacherName dedans). Qu'est-ce qui m'empêche d'avoir "Mr Jones" dans la première rangée, mais de mettre ensuite "Mr Bloggs" dans la deuxième rangée? Je ne devrais pas être autorisé à le faire, car ils ont tous les deux l'ID 332.
Smashery

30
@instantsetsuna - Explication complète: Dans certains tribunaux, on demande à un témoin s'il dira "La vérité, toute la vérité et rien que la vérité, alors aidez-moi Dieu"; car Dieu est considéré comme celui qui a l'autorité quand il s'agit de savoir si vous dites la vérité. Dans le cas des bases de données, nous pouvons dire "Les données dépendent de la clé, de la clé entière et rien que de la clé, alors aidez-moi Codd". Ted Codd est celui qui a eu l'idée des bases de données relationnelles - des choses qui reposent sur des clés, etc., donc il serait l'autorité de passer dans le cas des bases de données relationnelles.
Smashery

5
@Smashery Quelle est la différence entre 2NF et 3NF?
Zo a

119

Je n'ai jamais eu une bonne mémoire pour la formulation exacte, mais dans ma classe de base de données, je pense que le professeur a toujours dit quelque chose comme:

Les données dépendent de la clé [1NF], de la clé entière [2NF] et rien que de la clé [3NF].


72
... alors aidez-moi Codd. en.wikipedia.org/wiki/Ted_Codd
Smashery

6
Alors, quelle est la différence entre The data depends on the key [1NF], nothing but the key [3NF]? S'il vous plaît ne nous confondez pas, car 1 réponse sentense ne clarifie pas la réponse, mais confond les visiteurs!
Pratik

2
"chaque cellule d'un tableau ne doit contenir qu'une seule information, et il ne peut y avoir de lignes en double." - Je ne vois pas comment "les données dépendent de la clé" correspond à tout cela.
Simon Forsberg

46

Voici une réponse rapide, certes massacrée , mais en une phrase:

1NF: votre table est organisée comme un ensemble de données non ordonné et il n'y a pas de colonnes répétitives.

2NF: vous ne répétez pas les données dans une colonne de votre table à cause d'une autre colonne.

3NF: Chaque colonne de votre table ne concerne que la clé de votre table - vous n'auriez pas de colonne dans une table qui décrit une autre colonne de votre table qui n'est pas la clé.

Pour plus de détails, voir wikipedia ...


1
Pour autant que je sache, le fait que 1NF évite les groupes répétitifs ne fait pas référence à des colonnes répétitives, mais plutôt à des colonnes uniques qui représentent un nombre arbitraire de valeurs répétées pour le même attribut, c'est-à-dire qu'elles ne sont pas atomiques. Je base cela par exemple sur (1) stackoverflow.com/questions/23194292/… / (2) stackoverflow.com/questions/26357276/…
underscore_d

34

1NF: une seule valeur par colonne

2NF: toutes les colonnes de clé non primaire du tableau doivent dépendre de la clé primaire entière.

3NF: toutes les colonnes de clé non primaire du tableau doivent dépendre DIRECTEMENT de la clé primaire entière.

J'ai écrit un article plus en détail ici


Parce que vous n'avez pas fourni d'attribution. J'ai modifié la réponse pour fournir l'attribution.
Robert Harvey

Dans la mesure du possible, incluez l'exemple dans la réponse elle-même. Un utilisateur occasionnel devrait pouvoir lire votre réponse et en tirer profit sans avoir à cliquer sur le lien du blog. En d'autres termes, la réponse doit être autonome.
Robert Harvey

Je garderai cela à l'esprit. Merci :)
Arcturus

3
Notez également que cette question a deux ans et qu'elle contient déjà une réponse très positive qui a été marquée comme acceptée par le PO. Les réponses tardives sont examinées plus attentivement par la communauté pour évaluer si elles ajoutent ou non une véritable valeur ajoutée au PO.
Robert Harvey

3
@Arcturus a lu l'article, toujours l'une des meilleures explications pour la normalisation.
Olian04
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.