110 votes

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

Pourquoi les types de bases de données parlent-ils de la normalisation?

Qu'Est-ce que c'est? Comment ça aide?

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

185voto

JacquesB Points 19878

La normalisation est essentiellement à la conception d'un schéma de base de données tels que les doublons de données redondants et est à éviter. Si un élément de données est dupliqué à plusieurs endroits dans la base de données, il y a le risque qu'il est mis à jour dans un endroit, mais pas les autres, conduisant à la corruption des données.

Il y a un certain nombre de normalisation des niveaux de 1. forme normale à 5. forme normale. Chaque forme normale explique comment se débarrasser de certains problème spécifique, généralement liée à la redondance.

Quelques exemples de normalisation des erreurs:

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

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

Ici, la "Voiture" dans la colonne (qui est une chaîne) ont 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 le fait d'avoir plusieurs valeurs dans une cellule, c'est qu'il est difficile de mettre à jour, difficiles à interroger, et vous ne pouvez pas appliquer les index, les contraintes et ainsi de suite.

(2) après Avoir redondant non-données clés (ie. 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é pour chaque colonne, même si le nom est toujours déterminée par le nom d'utilisateur. De ce fait, il est théoriquement possible de changer le nom de Sue en ligne un et pas l'autre, qui est une corruption de données. Le problème est résolu par diviser le tableau en deux, et la création d'une clé primaire/clé étrangère de la relation:

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

Maintenant, il peut sembler que nous avons encore de données redondantes, car le nom d'utilisateur sont répétées; Cependant, le PK/FK contrainte assure que les valeurs ne peuvent pas être mis à jour indépendamment, de sorte que l'intégrité est sûr.

Est-il important? Oui, c'est très important. En ayant une base de données avec la normalisation des erreurs, vous ouvrez le risque de devenir invalide ou de corruption des données dans la base de données. Étant donné que les données "vie éternelle", il est très difficile de se débarrasser de la corruption de données lors de la première il est entré dans la base de données.

Ne pas avoir peur de la normalisation. L'officiel de la définition technique de la normalisation des niveaux sont assez obtus. Il le fait ressembler à de la normalisation est un complexe processus mathématiques. Toutefois, la normalisation est fondamentalement juste du bon sens, et vous verrez que si vous la conception d'un schéma de base de données à l'aide de bon sens, il va généralement être entièrement normalisée.

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

  • certains croient que les bases de données normalisé sont plus lents, et la dénormalisation de l'amélioration des performances. Ceci n'est vrai que dans des cas très particuliers. Généralement une base de données normalisée est aussi le plus rapide.

  • parfois, la normalisation est décrit comme un graduel du processus de conception et vous avez à décider "quand s'arrêter". Mais en réalité, la normalisation des niveaux de décrire les différents problèmes spécifiques. Le problème a été résolu par des formes normales ci-dessus 3e NF sont assez rares, les problèmes en premier lieu, alors les chances sont que votre schéma est déjà en 5NF.

Ne s'applique à rien en dehors de bases de données? Pas directement, non. Les principes de la normalisation est tout à fait spécifiques pour les bases de données relationnelles. Mais le grand thème sous-jacent - que vous ne devriez pas avoir de doublons de données si les différentes instances peuvent sortir de synchronisation peut être largement appliquée. C'est en gros le principe DRY.

45voto

Les règles de normalisation (source: inconnue)

  • La clé ( 1NF )
  • La clé entière ( 2NF )
  • et rien que la clé ( 3NF )

... Alors aidez-moi Codd.

19voto

Ilya Kochetov Points 11641

Plus important encore, il sert à éliminer la duplication de la base de données des enregistrements. 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 avez besoin de changer le nom de la personne plus tard, vous n'avez qu'à modifier dans un seul endroit.

Il est crucial pour la conception de base de données et, en théorie, vous devriez l'utiliser autant que possible de garder l'intégrité de vos données. Cependant lors de la récupération des informations à partir d'un grand nombre de tables que vous êtes la perte de certains de performance et c'est pourquoi, parfois, vous pourriez voir denormalised tables de base de données (également appelé aplatie) utilisé dans les performances des applications critiques.

Mon conseil est de commencer avec un bon degré de normalisation et de normalisation lorsque c'est vraiment nécessaire

P. S. aussi lire cet article: http://en.wikipedia.org/wiki/Database_normalization pour en savoir plus sur le sujet et sur la soi-disant formes normales

7voto

Rik Points 12802

La normalisation de la procédure utilisée pour éliminer les redondances et les dépendances fonctionnelles entre les colonnes dans une table.

Il existe plusieurs formes normales, généralement indiquée par un numéro. Un nombre plus élevé signifie moins de redondances et les dépendances. Toute la table SQL est en 1FN (première forme normale, presque par définition) Normaliser les moyens de changer le schéma (souvent le partitionnement des tables) dans un chemin réversible, d'en donner un modèle qui est fonctionnellement identique, sauf avec le moins de redondance et de dépendances.

La redondance et de la dépendance des données n'est pas souhaitable car il peut conduire à inconsisencies lors de la modification de données.

5voto

Chris Cudmore Points 11133

Il est prévu de réduire la redondance des données.

Pour une discussion formelle, voir Wikipedia http://en.wikipedia.org/wiki/Database_normalization

Je vais vous donner un peu simpliste exemple.

Supposons une organisation de la base de données qui contient généralement des membres de la famille

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

pourrait être normalisée comme

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

et une table de la famille

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 en FNBC, la prochaine étape consiste généralement à Dé-normaliser dans une logique d'accélérer les requêtes et de réduire la complexité de certaines communes inserts. Cependant, vous ne pouvez pas le faire sans avoir à les normaliser en premier.

L'idée étant que la redondance de l'information est réduite à une seule entrée. Ceci est particulièrement utile dans des domaines comme les adresses, où M. Chris soumet son discours à l'Unité-7, 123, rue main et de Mme Chris listes de Suite-7 123, Rue Principale, qui apparaîtra dans la table d'origine comme deux adresses distinctes.

Généralement, 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 identifiants uniques et à remplacer les éléments répétés avec une clé primaire de référencement de la nouvelle table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X