Qu'est-ce que la Normalisation (ou la normalisation)?

pourquoi les gars de la base de données parlent-ils de normalisation?

Qu'est-ce que c'est? Comment peut-il aider?

s'applique-t-il à quelque chose en dehors des bases de données?

88
demandé sur Adam Lear 2008-10-29 16:01:41

10 réponses

la normalisation consiste essentiellement à concevoir un schéma de base de données de manière à éviter les données redondantes. Si une donnée est dupliquée à plusieurs endroits de la base de données, il y a un risque qu'elle soit mise à jour à un endroit, mais pas à l'autre, ce qui entraîne la corruption des données.

il y a un certain nombre de niveaux de normalisation à partir de 1. forme normale à 5. forme normale. Chaque forme normale décrit comment se débarrasser d'un problème spécifique, généralement lié à la redondance.

quelques erreurs typiques de normalisation:

(1) Avoir plus d'une valeur dans une cellule. Exemple:

UserId | Car
---------------------
1      | Toyota
2      | Ford,Cadillac

ici la colonne " Car " (qui est une chaîne) a plusieurs valeurs. Qui offense la première forme normale, qui dit que chaque cellule doit avoir qu'une seule valeur. Nous pouvons normaliser ce problème par une ligne distincte par voiture:

UserId | Car
---------------------
1      | Toyota
2      | Ford
2      | Cadillac

le problème avec plusieurs valeurs dans une cellule est qu'il est délicat de mettre à jour, délicat d'interroger, et que vous ne pouvez pas appliquer des index, des contraintes et ainsi de suite.

(2) ayant des données non clés redondantes (c.-à-d. données répétées inutilement dans plusieurs lignes). Exemple:

UserId | UserName | Car
-----------------------
1      | John     | Toyota
2      | Sue      | Ford
2      | Sue      | Cadillac

cette conception est un problème parce que le nom est répété par chaque colonne, même si le nom est toujours déterminé par l'UserId. Cela permet théoriquement de changer le nom de Sue dans une rangée et pas L'autre, qui est la corruption de données. Le problème est résolu en divisant la table en deux et en créant une relation clé primaire / clé étrangère:

UserId(FK) | Car               UserId(PK) | UserName
---------------------          -----------------
1          | Toyota            1          | John
2          | Ford              2          | Sue
2          | Cadillac

maintenant il peut sembler que nous avons encore des données redondantes parce que les UserId sont répétés; cependant la contrainte PK/FK garantit que les valeurs ne peuvent pas être mises à jour indépendamment, donc l'intégrité est sûre.

est-ce important? Oui, c'est très important. En ayant une base de données avec des erreurs de normalisation, vous ouvrez le risque d'obtenir des données invalides ou corrompus dans la base de données. Puisque les données "vit pour toujours" il est très difficile de se débarrasser des données corrompues quand d'abord il a entré dans la base de données.

N'ayez pas peur de normalisation . Les définitions techniques officielles des niveaux de normalisation sont tout à fait obtus. On dirait que la normalisation est un processus mathématique compliqué. Toutefois, la normalisation est fondamentalement juste le bon sens, et vous constaterez que si vous concevez un schéma de base de données en utilisant le bon sens, il sera typiquement pleinement normalisé.

Il y a un certain nombre d'idées fausses autour de la normalisation:

  • " certains pensent que les bases de données normalisées sont plus lentes et que la dénormalisation améliore les performances. Ceci n'est vrai que dans des cas très particuliers. Typiquement, une base de données normalisée est aussi la plus rapide.

  • parfois, la normalisation est décrite comme un processus de conception graduel et vous devez décider "quand arrêter". Mais en fait les niveaux de normalisation décrivent juste différents problèmes spécifiques. Le problème résolu par les formes normales au-dessus de 3rd NF sont des problèmes assez rares en premier lieu, donc les chances sont que votre schéma est déjà dans 5NF.

S'applique-t-elle à quelque chose en dehors des bases de données? Pas directement, non. Les principes de normalisation sont très spécifiques pour les bases de données relationnelles. Cependant le thème général sous - jacent - que vous ne devriez pas avoir de données dupliquées si les différentes instances peuvent sortir de la synchronisation-peut être appliqué largement. Il s'agit essentiellement du dry principle .

159
répondu JacquesB 2008-10-29 14:58:51

les règles de normalisation (source: inconnue)

... Alors aide-moi Codd.

42
répondu ConcernedOfTunbridgeWells 2008-10-29 14:11:45

plus important encore, il sert à supprimer la duplication des enregistrements de la base de données. Par exemple, si vous avez plus d'un endroit (tables) lorsque le nom d'une personne pourrait venir de passer le nom d'une table séparée et de référence-il partout ailleurs. De cette façon, si vous devez changer le nom de la personne plus tard, vous n'avez qu'à le changer à un endroit.

il est crucial pour la bonne conception de la base de données et en théorie, vous devriez l'utiliser autant que possible pour garder votre intégrité des données. Cependant, lorsque vous récupérez des informations de plusieurs tables, vous perdez des performances et c'est pourquoi parfois vous pouviez voir des tables de base de données dénormalisées (également appelées aplaties) utilisées dans des applications critiques pour les performances.

mon conseil est de commencer par un bon degré de normalisation et de ne faire la dénormalisation que lorsque vraiment nécessaire

aussi vérifier cet article: http://en.wikipedia.org/wiki/Database_normalization pour en savoir plus sur le sujet et au sujet de soi-disant formes normales

19
répondu Ilya Kochetov 2008-10-29 13:14:55

normalisation procédure utilisée pour éliminer la redondance et les dépendances fonctionnelles entre les colonnes d'un tableau.

il existe plusieurs formes normales, généralement indiquées par un numéro. Un nombre plus élevé signifie moins de licenciements et de dépendances. Toute table SQL est en 1NF (première forme normale, à peu près par définition) normaliser signifie changer le schéma (souvent partitionner les tables) d'une manière réversible, donnant un modèle qui est fonctionnellement identique, sauf avec moins de redondance et de dépendances.

la redondance et la dépendance des données ne sont pas souhaitables parce qu'elles peuvent conduire à des inconsistances lors de la modification des données.

7
répondu Rik 2013-10-15 09:21:52

il est destiné à réduire la redondance des données.

pour une discussion plus formelle, voir la Wikipedia http://en.wikipedia.org/wiki/Database_normalization

je vais donner un exemple un peu simpliste.

supposons que la base de données d'une organisation contient habituellement des membres de la famille

id, name, address
214 Mr. Chris  123 Main St.
317 Mrs. Chris 123 Main St.

pourrait être normalisé comme

id name familyID
214 Mr. Chris 27
317 Mrs. Chris 27

et une famille tableau 151940920"

ID, address
27 123 Main St.

quasi-Complète de la normalisation (FNBC) n'est généralement pas utilisée dans la production, mais est une étape intermédiaire. Une fois que vous avez mis la base de données dans BCNF, la prochaine étape est généralement de-normaliser d'une manière logique pour accélérer les requêtes et réduire la complexité de certains inserts communs. Cependant, vous ne pouvez pas faire cela bien sans le normaliser correctement d'abord.

l'idée étant que l'information redondante est réduit à une seule entrée. Cela est particulièrement utile dans les champs comme les adresses, où M. Chris soumet son adresse comme unité-7 123, rue Main et Mme Chris lists Suite-7 123, rue Main, qui apparaîtrait dans le tableau original comme deux adresses distinctes.

Typiquement, la technique utilisée est de trouver des éléments répétés, et d'isoler ces champs dans une autre table avec des identificateurs uniques et de remplacer les éléments répétés par une clé primaire se référant à la nouvelle table.

5
répondu Chris Cudmore 2008-10-29 13:23:21

citant CJ Date: Theory IS practical.

les écarts par rapport à la normalisation résulteront en certaines anomalies dans votre base de données.

les écarts par rapport à la première forme normale causent des anomalies d'accès, ce qui signifie que vous devez décomposer et numériser les valeurs individuelles afin de trouver ce que vous recherchez. Par exemple, si l'une des valeurs est la chaîne "Ford, Cadillac" comme indiqué par une réponse précédente, et vous recherchez tous les ocurrences de "Ford", vous allez devoir briser la chaîne et regarder les substrats. Cela, dans une certaine mesure, ayant pour but de stocker les données dans une base de données relationnelle.

la définition de la première forme normale a changé depuis 1970, mais ces différences ne doivent pas vous préoccuper pour l'instant. Si vous concevez vos tables SQL en utilisant le modèle de données relationnelles, vos tables seront automatiquement dans 1NF.

écarts par rapport à la deuxième forme normale et beyond va causer des anomalies de mise à jour, parce que le même fait est stocké à plus d'un endroit. Ces problèmes rendent impossible de stocker certains faits sans stocker d'autres faits qui peuvent ne pas exister, et doivent donc être inventés. Ou lorsque les faits changent, vous pourriez devoir localiser tous les plces où un fait est stocké et mettre à jour tous ces endroits, de peur que vous ne finissiez avec une base de données qui se contredit. Et, quand vous allez pour supprimer une ligne de la base de données, vous pouvez constater que si vous le faites, vous supprimer le seul endroit où un fait qui est encore nécessaire est stocké.

ce sont des problèmes logiques, pas des problèmes de performance ou d'espace. Parfois, vous pouvez contourner ces anomalies de mise à jour en programmant soigneusement. Parfois (souvent) il est préférable de prévenir les problèmes en premier lieu en adhérant à des formes normales.

Nonobstant la valeur dans ce qui a déjà été dit, il devrait être mentionné que la normalisation est un bas en haut approche, pas une approche descendante. Si vous suivez certaines méthodologies dans votre analyse des données, et dans votre conception initiale, vous pouvez être assuré que la conception sera conforme à 3NF au minimum. Dans de nombreux cas, la conception sera entièrement normalisée.

où vous pouvez vraiment vouloir appliquer les concepts enseignés sous la normalisation est quand vous êtes donné des données héritées, à partir d'une base de données héritées ou à partir de fichiers constitués de dossiers, et les données ont été conçues en complet ignorance des formes normales et des conséquences de s'en écarter. Dans ces cas, vous devrez peut-être découvrir les écarts par rapport à la normalisation et corriger la conception.

Avertissement: la normalisation est souvent enseignée avec des connotations religieuses, comme si toute dérogation à la normalisation complète était un péché, une offense contre le Codd. (petit jeu de mots). Ne l'achetez pas. Quand vous vraiment, vraiment apprendre la conception de base de données, vous ne savez pas seulement comment suivre les règles, mais aussi quand il est sûr de les briser.

3
répondu Walter Mitty 2008-10-31 13:25:25

avant de passer directement au thème "normalisation de la base de données et ses types", nous devons comprendre la redondance des données, les anomalies d'insertion/mise à jour/suppression, la dépendance partielle et la dépendance fonctionnelle transitive.

qu'est-ce que la redondance des données et l'anomalie de mise à jour/modification?

la redondance de données est la duplication inutile de données dans plusieurs tables à l'intérieur de la base de données ou même à l'intérieur de la même table. Il augmente la taille de la base de données inutilement et diminue l'efficacité de la base de données en provoquant l'incohérence des données.

exemple:

enter image description here

ici le "student_age" pour L'élève Alex est répété inutilement ce qui augmente naturellement la redondance des données. Lorsque la colonne ‘student_age " doit être modifié dans le futur, puis mise à jour doit être effectuée sur les deux lignes de l'étudiant Alex comme dans le tableau ci-dessus. Ce scénario est connu sous le nom d'anomalie de mise à jour. Si l'utilisateur ne met à jour qu'une seule ligne et oublie de mettre à jour l'autre ligne, il en résultera une incohérence des données.

qu'est-ce qu'une anomalie d'insertion?

anomalie d'Insertion se produit lorsque certaines valeurs pour un attribut* ne peuvent pas être insérées dans un tableau sans l'existence des données supplémentaires liées à cette valeur particulière.

Exemple:

enter image description here

Ici, le ‘student_name " et " exam_registered’ sont supposés être une clé primaire composite (clé primaire qui contient plusieurs colonnes). La clé primaire doit être toujours unique, ne doit pas contenir de valeurs nulles et elle doit identifier de façon unique chaque ligne dans une table. Supposons maintenant que le lycée essaye d'introduire un nouvel examen appelé Chimie. Au début, aucun étudiant n'a été inscrits dans ce cours. Puisque la table ci-dessus n'accepte pas la valeur nulle dans la colonne "nom_du_étudiant", nous devons attendre qu'au moins un étudiant ait été inscrit pour entrer pour l'examen de chimie dans la table ci-dessus.

Qu'est-ce qu'une anomalie de suppression?

une anomalie de suppression se produit lorsque certaines valeurs importantes d'un attribut* sont perdues en raison de la suppression d'autres valeurs non requises.

Exemple:

enter image description here

Ici, le ‘student_name " et " exam_registered’ sont supposés être une clé primaire composite (clé primaire qui contient plusieurs colonnes). La clé primaire doit toujours être unique et ne doit pas contenir de valeurs nulles et elle doit identifier chaque ligne d'une table de manière unique. Supposons maintenant que L'étudiant nommé John a annulé son inscription pour l'examen nommé English. Depuis la colonne 'student_name' ne peut pas contenir de valeur nulle nous serons forcés de supprimer toute la ligne qui nous a coûté la perte de l'examen nommé anglais de notre table. Mais l'école secondaire offre toujours la possibilité de passer l'examen d'Anglais à leurs élèves.

Qu'est-ce qu'une dépendance partielle?

un tableau est considéré comme partiellement dépendant lorsqu'un attribut clé non primaire de ce tableau dépend entièrement d'une partie de la clé primaire composite. attribut dans ce tableau.

exemple:

enter image description here

Considérer un tableau de 3 colonnes nommées ‘student_name’ , ‘student_age " et "exam_registered" comme ci-dessus. Ici, ‘student_name " et " exam_registered’ peuvent former ensemble une clé primaire composite. Normalement, chaque colonne de la clé non primaire dans un tableau bien normalisé devrait toujours dépendre de l'ensemble complet de la clé primaire composite. Ici 'student_age' dépend uniquement du’ student_name ‘et n'est pas lié à’ examin_registered ' qui fait que cette table est en dépendance partielle.

Qu'est-ce qu'une dépendance fonctionnelle transitive?

un tableau est considéré comme une dépendance fonctionnelle transitive lorsqu'un attribut clé non primaire dans ce tableau dépend plus fortement d'un autre attribut clé non primaire dans ce tableau.

exemple:

enter image description here

dans le tableau ci-dessus, la relation entre l'attribut clé non primaire "postal_code" et un autre attribut clé non primaire "City" est beaucoup plus forte que la relation entre l'attribut clé primaire "student_id" et l'attribut clé non primaire "postal_code". Cela fait que le tableau ci-dessus est en dépendance fonctionnelle transitive.

avec une meilleure compréhension de la au-dessus des concepts nous pouvons maintenant plonger dans la normalisation des tables dans les bases de données.

données dépend de la clé [1NF], l'ensemble de la clé [2NF] et rien que le clé [3NF]

Table sans normalisation

un exemple de tableau dénormalisé est donné ci-dessous qui sera normalisé dans les étapes progressives de cet article.

Dans l'exemple ci-dessous pour le student_id=2, il y a 2 entrées à cause de différentes id de parent. Ici, nous pouvons supposer comme Parent_id=1 représente le père et Parent_id=3 représente la mère de cet étudiant dont student_id=2.

exemple:

enter image description here

première forme normale (1NF)

Règles: 1. Les attributs ne doivent contenir que des valeurs atomiques 2. Deux lignes de données doit contenir un groupe d'information répétitif 3. Chaque table doit avoir un clé primaire

Étape 1:

enter image description here

la règle 1 est satisfaite à l'étape ci-dessus, mais elle ne satisfait pas à la règle 2 et à la règle 3.

Étape 2: Les tableaux ci-dessous satisfont désormais aux Règles 1, 2 et 3 de 1NF.

enter image description here

deuxième forme normale (2NF)

Règles:

  1. Tables doivent satisfaire à la première forme normale (1FN)
  2. il ne devrait pas y avoir de dépendance partielle dans les tableaux

excepté le premier tableau tous les autres tableaux de 1NF satisfait 2FN. Dans le premier tableau, l'âge de la colonne dépend uniquement de la colonne ‘student_id’. Ceci viole la règle 2 de 2NF. Parce que toutes les colonnes non-clés devraient dépendre complètement des colonnes clés primaires. Ainsi les tableaux normalisés selon 2NF sont donnés ci-dessous.

enter image description here

troisième forme normale (3NF)

habituellement une table de base de données relationnelles est souvent décrit comme "normalisés", s'il répond à 3FN. La plupart des tables 3NF sont libres d'insérer, de mettre à jour et de supprimer des anomalies.

Règles:

  1. Tables doivent satisfaire à la deuxième forme normale (2FN)
  2. il ne devrait pas y avoir de dépendances fonctionnelles transitoires dans les tableaux

excepté le dernier tableau tous les autres tableaux de la 2NF satisfait 3FN. C'est parce que la colonne "ville" plus de dépend fortement de la colonne ‘code_postal’ que la clé primaire ‘student_id "qui rend la colonne "ville" pour être transitif fonctionnelle dépend de la colonne ‘student_id’. Ainsi, les tableaux normalisés définitifs selon 3NF sont donnés ci-dessous.

enter image description here

*attribut:

- considérez une table d'étudiants. Ici student_name, âge, etc., sont considérés comme les attributs qui sera le titre de la colonne correspondante.

======================================================================== exemples simples-normalisation de la base de données

3
répondu Arockia Nirmal 2017-02-23 08:30:30

la Normalisation est l'un des concepts de base. Cela signifie que deux choses n'ont pas d'influence l'une sur l'autre.

dans les bases de données signifie spécifiquement que deux (ou plus) tables ne contiennent pas les mêmes données, c.-à-d. n'ont pas de redondance.

à première vue qui est vraiment bon parce que vos chances de faire quelques problèmes de synchronisation sont proches de zéro, vous savez toujours où sont vos données, etc. Mais, probablement, votre nombre de tables à grandir et vous aurez des problèmes pour traverser les données et d'obtenir certains résultats sommaires.

ainsi, à la fin, vous finirez avec un design de base de données qui n'est pas purement normalisé, avec une certaine redondance (ce sera dans certains des niveaux possibles de normalisation).

2
répondu Nenad Dobrilovic 2008-10-29 13:09:56

Qu'est-ce que la normalisation?

la normalisation est un processus formel par étapes qui nous permet de décomposer les tables de base de données de telle manière que les deux redondance de données et anomalies de mise à jour sont minimisées.

Processus De Normalisation

enter image description here courtoisie

première forme normale si et seulement si le domaine de chaque attribut contient seulement des valeurs atomiques (une valeur atomique est une valeur qui ne peut pas être divisée), et la valeur de chaque attribut contient seulement une valeur unique de ce domaine(Exemple:- domaine pour la colonne genre est: "M", "F". ).

la première forme normale applique ces critères:

  • éliminer les groupes répétitifs dans les tables individuelles.
  • créer un tableau séparé pour chaque ensemble de données connexes.
  • Identifier chaque ensemble de données avec une clé primaire

deuxième forme normale = 1NF + aucune dépendance partielle, c'est-à-dire que tous les attributs non clés sont entièrement fonctionnels et dépendent de la clé primaire.

troisième forme normale = 2NF + aucune dépendance transitive, c'est-à-dire que tous les attributs non-clés sont entièrement fonctionnels et dépendent directement de la clé primaire.

Boyce–Codd forme normale (ou BCNF ou 3.5 NF) est une version légèrement plus forte de la troisième forme normale (3NF).

Remarque:- les Deuxième, Troisième, et Boyce–Codd les formes normales sont concernés par les dépendances fonctionnelles. exemples

quatrième forme normale = 3NF + supprimer les dépendances multivaluées

Cinquième forme normale = 4NF + supprimer rejoindre les dépendances

1
répondu Premraj 2016-03-19 05:53:31

il aide à prévenir les données en double (et pire, conflictuelles).

peut cependant avoir un impact négatif sur la performance.

-9
répondu Brian Knoblauch 2008-10-29 13:03:15