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

Pourquoi les gars de la firebase database continuent-ils à parler de normalisation?

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

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

La normalisation consiste essentiellement à concevoir un schéma de firebase database de manière à éviter les données dupliquées et redondantes. Si un élément de données est dupliqué à plusieurs endroits dans la firebase database, il existe un risque qu’il soit mis à jour à un endroit mais pas à un autre, ce qui entraînerait une corruption des données.

Il existe un certain nombre de niveaux de normalisation 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 de normalisation typiques:

(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. Cela offense la première forme normale, qui dit que chaque cellule ne doit avoir qu’une valeur. Nous pouvons normaliser ce problème en ayant une ligne séparée par voiture:

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

Le problème avec plusieurs valeurs dans une cellule est qu’il est difficile de mettre à jour, difficile à interroger et que vous ne pouvez pas appliquer des index, des contraintes, etc.

(2) Avoir des données non clés redondantes (c’est-à-dire des données répétées inutilement sur plusieurs lignes). Exemple:

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

Cette conception est un problème car le nom est répété pour chaque colonne, même si le nom est toujours déterminé par le UserId. Cela rend théoriquement possible de changer le nom de Sue dans une ligne et pas dans 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 ayons toujours des données redondantes car les UserId sont répétés; Cependant, la contrainte PK / FK garantit que les valeurs ne peuvent pas être mises à jour de manière indépendante, donc l’intégrité est sûre.

Est-ce important? Oui, c’est très important. En ayant une firebase database avec des erreurs de normalisation, vous ouvrez le risque d’obtenir des données invalides ou corrompues dans la firebase database. Étant donné que les données “durent éternellement”, il est très difficile de se débarrasser des données corrompues lorsqu’elles sont entrées pour la première fois dans la firebase database.

N’ayez pas peur de la normalisation . Les définitions techniques officielles des niveaux de normalisation sont assez obtuses. Cela donne l’impression que la normalisation est un processus mathématique compliqué. Cependant, la normalisation est fondamentalement le bon sens, et vous constaterez que si vous concevez un schéma de firebase database en utilisant le bon sens, celui-ci sera généralement entièrement normalisé.

Il existe plusieurs idées fausses sur 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. Une firebase database normalisée est généralement la plus rapide.

  • Parfois, la normalisation est décrite comme un processus de conception progressive et vous devez décider «quand arrêter». Mais en réalité, les niveaux de normalisation décrivent simplement différents problèmes spécifiques. Le problème résolu par les formes normales au-dessus de la 3ème FN est un problème assez rare. Il est donc probable que votre schéma se trouve déjà dans 5NF.

S’applique-t-il à quelque chose en dehors des bases de données? Pas directement, non. Les principes de la normalisation sont assez spécifiques pour les bases de données relationnelles. Cependant, le thème général sous-jacent – à savoir que vous ne devriez pas avoir de données en double si les différentes instances peuvent être désynchronisées – peut être appliqué de manière large. C’est fondamentalement le principe DRY .

Les règles de la normalisation (source: inconnue)

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

… Alors aidez-moi Codd.

Plus important encore, il sert à supprimer les doublons des enregistrements de la firebase database. Par exemple, si vous avez plus d’un endroit (tables) où le nom d’une personne peut apparaître, déplacez le nom dans une table distincte et référencez-la partout ailleurs. De cette façon, si vous devez changer le nom de la personne ultérieurement, il vous suffit de le changer au même endroit.

Il est crucial pour une conception correcte de la firebase database et, en théorie, vous devez l’utiliser autant que possible pour préserver l’intégrité de vos données. Cependant, lorsque vous récupérez des informations depuis de nombreuses tables, vous perdez des performances et c’est pourquoi vous pouvez parfois voir des tables de firebase database dénormalisées (également appelées aplaties) utilisées dans des applications critiques.

Mon conseil est de commencer avec un bon degré de normalisation et de ne procéder à une dé-normalisation que lorsque cela est vraiment nécessaire.

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

Normalisation: procédure utilisée pour éliminer la redondance et les dépendances fonctionnelles entre les colonnes d’une table.

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

La redondance et la dépendance des données sont indésirables car elles peuvent entraîner des incohérences lors de la modification des données.

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

Pour une discussion plus formelle, consultez le site http://www.wikipedia.org/wiki/Database_normalization.

Je vais donner un exemple un peu simpliste.

Supposons une firebase database d’une organisation 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é comme

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

et une table de famille

 ID, address 27 123 Main St. 

La normalisation quasi-complète (BCNF) n’est généralement pas utilisée en production, mais constitue une étape intermédiaire. Une fois que vous avez placé la firebase database dans BCNF, l’étape suivante consiste généralement à la normaliser de manière logique afin d’accélérer les requêtes et de réduire la complexité de certaines insertions communes. Cependant, vous ne pouvez pas le faire correctement sans le normaliser correctement en premier.

L’idée étant que l’information redondante est réduite à une seule entrée. Ceci est particulièrement utile dans des domaines tels que les adresses, où M. Chris soumet son adresse, Unit-7 123 Main St. et Mme Chris, qui énumère Suite-7 123 Main Street, qui apparaîtrait dans le tableau original sous la forme de deux adresses distinctes.

Généralement, la technique utilisée consiste à rechercher des éléments répétés et à isoler ces champs dans une autre table avec des identifiants uniques et à remplacer les éléments répétés par une clé primaire faisant référence à la nouvelle table.

Citant CJ Date: La théorie est pratique.

Les écarts par rapport à la normalisation entraîneront certaines anomalies dans votre firebase database.

Les écarts par rapport à la première forme normale entraînent des anomalies d’access, ce qui signifie que vous devez décomposer et parsingr des valeurs individuelles afin de trouver ce que vous recherchez. Par exemple, si l’une des valeurs est la chaîne “Ford, Cadillac” donnée par une réponse antérieure, et que vous recherchez toutes les occurrences de “Ford”, vous devrez ouvrir la chaîne et regarder sous-chaînes. Cela, dans une certaine mesure, défait le but de stocker les données dans une firebase database relationnelle.

La définition de la première forme normale a changé depuis 1970, mais ces différences ne doivent pas vous concerner pour le moment. Si vous concevez vos tables SQL à l’aide du modèle de données relationnel, vos tables seront automatiquement dans 1NF.

Les départs à partir de la deuxième forme normale et au-delà entraîneront des anomalies de mise à jour, car le même fait est stocké à plusieurs endroits. Ces problèmes empêchent 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 devrez peut-être localiser tous les éléments où un fait est stocké et mettre à jour tous ces endroits, afin de ne pas vous retrouver avec une firebase database qui se contredit. Et, lorsque vous supprimez une ligne de la firebase database, vous pouvez constater que si vous le faites, vous supprimez le seul endroit où un fait encore nécessaire est stocké.

Ce sont des problèmes logiques, pas des problèmes de performances ou des problèmes d’espace. Parfois, vous pouvez contourner ces anomalies de mise à jour par une programmation minutieuse. Parfois (souvent) il vaut mieux prévenir les problèmes en adhérant aux formes normales.

Indépendamment de la valeur de ce qui a déjà été dit, il convient de mentionner que la normalisation est une approche ascendante et non une approche descendante. Si vous suivez certaines méthodologies dans votre parsing des données et dans votre conception initiale, vous pouvez être assuré que la conception sera au moins conforme à 3NF. Dans de nombreux cas, la conception sera entièrement normalisée.

Lorsque vous souhaitez vraiment appliquer les concepts enseignés dans le cadre de la normalisation, vous recevez des données héritées, des bases de données existantes ou des fichiers constitués d’enregistrements, et les données ont été entièrement ignorées des formes normales et des conséquences du départ. d’eux. Dans ces cas, vous devrez peut-être découvrir les écarts par rapport à la normalisation et corriger la conception.

Attention: la normalisation est souvent enseignée avec des connotations religieuses, comme si tout écart par rapport à la normalisation complète était un péché, un délit contre Codd. (petit jeu de mot là-bas). N’achetez pas ça. Lorsque vous apprenez vraiment, vraiment, la conception de bases de données, vous saurez non seulement suivre les règles, mais aussi savoir quand vous pouvez les supprimer en toute sécurité.

Avant de sauter directement dans la rubrique “Normalisation de la firebase database 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 des données est la duplication inutile des données dans plusieurs tables de la firebase database ou même dans la même table. Il augmente inutilement la taille de la firebase database et diminue l’efficacité de la firebase database en provoquant une incohérence des données.

Exemple:

entrer la description de l'image ici

Ici, le ‘student_age’ de l’étudiant Alex est répété inutilement, ce qui augmente naturellement la redondance des données. Lorsque la colonne ‘student_age’ doit être modifiée dans le futur, la mise à jour doit être effectuée sur les deux lignes de l’étudiant Alex, comme dans le tableau ci-dessus. Ce scénario est appelé anomalie de mise à jour. Si l’utilisateur met à jour une seule ligne et oublie de mettre à jour l’autre ligne provoquera une incohérence des données.

Qu’est-ce qu’une anomalie d’insertion?

Une anomalie d’insertion se produit lorsque certaines valeurs d’un atsortingbut * ne peuvent pas être insérées dans une table sans l’existence des données supplémentaires liées à cette valeur particulière.

Exemple:

entrer la description de l'image ici

Ici, les termes nom_étudiant et examen_examen sont supposés être une clé primaire composite (clé primaire contenant plusieurs colonnes). La clé primaire doit toujours être unique, ne doit pas contenir de valeurs NULL et doit identifier de manière unique chaque ligne d’une table. Supposons maintenant que le lycée essaie d’introduire un nouvel examen appelé chimie. Au début, aucun étudiant n’a été inscrit à ce cours. Comme le tableau ci-dessus n’accepte pas la valeur NULL dans la colonne ‘nom_etudiant’, nous avons besoin d’attendre qu’au moins un étudiant ait été inscrit pour effectuer l’examen de chimie dans le tableau ci-dessus.

Quelle est l’anomalie de suppression?

Une anomalie de suppression se produit lorsque certaines valeurs importantes d’un atsortingbut * sont perdues en raison de la suppression d’autres valeurs non requirejses.

Exemple:

entrer la description de l'image ici

Ici, les termes nom_étudiant et examen_examen sont supposés être une clé primaire composite (clé primaire contenant plusieurs colonnes). La clé primaire doit toujours être unique et ne doit pas contenir de valeurs NULL. Elle doit identifier chaque ligne de la table de manière unique. Supposons maintenant que l’étudiant nommé John a annulé son inscription à l’examen anglais. Comme la colonne ‘nom_etudiant’ ne peut pas contenir la valeur NULL, nous serons obligés de supprimer toute la ligne, ce qui nous a coûté la perte de l’examen nommé anglais de notre table. Mais le lycée offre toujours la possibilité de passer des examens d’anglais à leurs élèves.

Qu’est-ce que la dépendance partielle?

Une table est dite en dépendance partielle lorsqu’un atsortingbut de clé non primaire dans cette table dépend entièrement d’une partie de l’atsortingbut clé primaire composite de cette table.

Exemple:

entrer la description de l'image ici

Considérons une table avec 3 colonnes nommées ‘nom_etudiant’, ‘nom_etudiant’ et ‘examen_register’ comme ci-dessus. Ici, «nom_etudiant» et «examen_examen» peuvent former ensemble une clé primaire composite. Normalement, chaque colonne de clé non primaire d’une table bien normalisée doit toujours dépendre de l’ensemble complet de clé primaire composite. Ici, ‘student_age’ ne dépend que de ‘nom_etudiant’ et n’est pas lié à ‘exam_registered’, ce qui entraîne une dépendance partielle de cette table.

Qu’est-ce que la dépendance fonctionnelle transitive?

Une table est dite en dépendance fonctionnelle transitive lorsqu’un atsortingbut de clé non primaire dans cette table dépend plus fortement d’un autre atsortingbut de clé non primaire dans cette table.

Exemple:

entrer la description de l'image ici

Dans le tableau ci-dessus, la relation entre l’atsortingbut de clé non primaire ‘postal_code’ et un autre atsortingbut de clé non primaire ‘City’ est beaucoup plus fort que l’atsortingbut de clé primaire ‘student_id’ et l’atsortingbut de clé non primaire ‘postal_code’. Cela provoque la dépendance fonctionnelle du tableau ci-dessus.

Avec la meilleure compréhension des concepts ci-dessus, nous pouvons maintenant nous plonger dans la normalisation des tables dans les bases de données.

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

Tableau sans normalisation

Un exemple de tableau dénormalisé est donné ci-dessous qui sera normalisé dans les étapes incrémentielles de cet article.

Dans l’exemple ci-dessous pour student_id = 2, il y a 2 entrées à cause des identifiants parent différents. Ici, on peut supposer que 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:

entrer la description de l'image ici

Première forme normale (1NF)

Règles: 1. Les atsortingbuts ne doivent contenir que des valeurs atomiques 2. Deux lignes de données ne doivent pas contenir de groupe d’informations répétées 3. Chaque table doit avoir une clé primaire

Étape 1:

entrer la description de l'image ici

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

Étape 2: Les tableaux ci-dessous satisfont désormais à la règle 1, à la règle 2 et à la règle 3 de 1NF.

entrer la description de l'image ici

Deuxième forme normale (2NF)

Règles:

  1. Les tableaux doivent satisfaire à la première forme normale (1NF)
  2. Il ne devrait y avoir aucune dépendance partielle dans les tables

Sauf le premier tableau, toutes les autres tables de 1NF satisfont 2NF. Dans la première table, la colonne ‘age’ ne dépend que de la colonne ‘student_id’. Cela viole la règle 2 de 2NF. Parce que toutes les colonnes non clés doivent dépendre complètement des colonnes de clé primaire. Ainsi, les tableaux normalisés selon 2NF sont donnés ci-dessous.

entrer la description de l'image ici

Troisième forme normale (3NF)

Habituellement, une table de firebase database relationnelle est souvent décrite comme «normalisée» si elle répond à 3NF. La plupart des tables 3NF ne contiennent aucune anomalie d’insertion, de mise à jour et de suppression.

Règles:

  1. Les tableaux doivent satisfaire à la deuxième forme normale (2NF)
  2. Il ne devrait y avoir aucune dépendance fonctionnelle transitive dans les tables

Sauf le dernier tableau, toutes les autres tables du 2NF satisfont 3NF. En effet, la colonne ‘city’ dépend plus fortement de la colonne ‘postal_code’ que la clé primaire ‘student_id’, ce qui rend la colonne ‘city’ dépendant de la colonne ‘student_id’. Ainsi, les tableaux normalisés finaux selon 3NF sont donnés ci-dessous.

entrer la description de l'image ici

*Atsortingbut:

– Considérez un tableau d’étudiants. Ici, nom_élève, âge, etc. sont considérés comme les atsortingbuts qui seront le titre des colonnes correspondantes.

================================================== ====================== Exemples simples – normalisation de la firebase database

La normalisation est l’un des concepts de base. Cela signifie que deux choses n’influencent pas l’une sur l’autre.

Dans les bases de données, cela signifie spécifiquement que deux tables (ou plus) ne contiennent pas les mêmes données, c’est-à-dire qu’elles n’ont aucune redondance.

A première vue, ce qui est vraiment bien, car vos chances de résoudre certains problèmes de synchronisation sont quasiment nulles, vous savez toujours où se trouvent vos données, etc. Mais votre nombre de tables augmentera probablement et vous aurez des problèmes pour croiser les données. et pour obtenir des résultats sommaires.

Ainsi, à la fin, vous finirez avec la conception de firebase database qui n’est pas purement normalisée, avec une certaine redondance (ce sera dans certains des niveaux possibles de normalisation).

Qu’est-ce que la normalisation?

La normalisation est un processus formel étape par étape qui nous permet de décomposer les tables de firebase database de manière à minimiser à la fois la redondance des données et les anomalies de mise à jour .

Processus de normalisation
entrer la description de l'image ici Courtoisie

Première forme normale si et seulement si le domaine de chaque atsortingbut ne contient que des valeurs atomiques (une valeur atomique est une valeur qui ne peut pas être divisée) et la valeur de chaque atsortingbut ne contient qu’une seule valeur de ce domaine (exemple: – domain pour le la colonne genre est: “M”, “F”.).

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

  • Éliminez les groupes répétés dans des tables individuelles.
  • Créez une table distincte pour chaque dataset associées.
  • Identifier chaque dataset associées avec une clé primaire

Deuxième forme normale = 1NF + pas de dépendances partielles, c.-à-d. Que tous les atsortingbuts non-clés sont entièrement fonctionnels en fonction de la clé primaire.

Troisième forme normale = 2NF + pas de dépendances transitives, c’est-à-dire que tous les atsortingbuts non-clés dépendent entièrement de façon fonctionnelle DIRECTEMENT uniquement de la clé primaire.

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

Remarque: – Les deuxième, troisième et troisième formes normales de Boyce – Codd concernent les dépendances fonctionnelles. Exemples

Quasortingème forme normale = 3NF + supprimer les dépendances à valeurs multiples

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

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

Peut avoir un impact négatif sur la performance si.