web-dev-qa-db-fra.com

Normalisation dans MYSQL

Quelqu'un pourrait-il m'aider à savoir ce qu'est la normalisation dans mysql et dans quel cas et comment nous devons l'utiliser.

Merci d'avance.

37
Fero

J'essaie ici d'expliquer la normalisation en termes simples. Tout d'abord, c'est quelque chose qui s'applique à la base de données relationnelle (Oracle, Access, MySQL), donc ce n'est pas seulement pour MySQL.

La normalisation consiste à s'assurer que chaque table possède les seuls champs minimaux et à se débarrasser des dépendances. Imaginez que vous ayez un dossier d'employé et que chaque employé appartient à un service. Si vous stockez le département en tant que champ avec les autres données de l'employé, vous avez un problème - que se passe-t-il si un département est supprimé? Vous devez mettre à jour tous les champs du département et il y a possibilité d'erreur. Et si certains employés n'ont pas de service (peut-être nouvellement affecté?). Maintenant, il y aura des valeurs nulles.

Donc, la normalisation, en bref, consiste à éviter d'avoir des champs qui seraient nuls et à s'assurer que tous les champs de la table n'appartiennent qu'à un domaine de données décrit. Par exemple, dans la table des employés, les champs peuvent être id, nom, numéro de sécurité sociale, mais ces trois champs n'ont rien à voir avec le service. Seul l'ID de l'employé décrit le service auquel appartient l'employé. Cela implique donc que le département dans lequel un employé se trouve devrait être dans une autre table.

Voici un processus de normalisation simple.

EMPLOYEE ( < employee_id >, name, social_security, department_name)

Ce n'est pas normalisé, comme expliqué. Une forme normalisée pourrait ressembler à

EMPLOYEE ( < employee_id >, name, social_security)

Ici, la table Employé n'est responsable que d'un seul ensemble de données. Alors, où stockons-nous le département auquel l'employé appartient? Dans une autre table

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Ce n'est pas optimal. Et si le nom du département change? (cela arrive tout le temps au gouvernement américain). Il est donc préférable de le faire

EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )

Il existe une première forme normale, une deuxième forme normale et une troisième forme normale. Mais à moins que vous n'étudiiez un cours DB, je choisis généralement la forme la plus normalisée que je puisse comprendre.

J'espère que cela t'aides.

79
Extrakun

La normalisation n'est pas uniquement pour MYSql. C'est un concept général de base de données.

La normalisation est le processus d'organisation efficace des données dans une base de données. Le processus de normalisation a deux objectifs: éliminer les données redondantes (par exemple, stocker les mêmes données dans plusieurs tables) et garantir que les dépendances de données ont un sens (stocker uniquement les données associées dans une table). Ces deux objectifs sont louables car ils réduisent la quantité d'espace qu'une base de données consomme et garantissent un stockage logique des données.

Les formes normales en SQL sont données ci-dessous.

Première forme normale (1NF): Une relation est dite en 1NF si elle n'a que des attributs à valeur unique, ni répétition ni tableau ne sont autorisés.

Deuxième forme normale (2NF): Une relation est dite en 2NF si elle est en 1NF et chaque attribut non clé est entièrement fonctionnel en fonction de la clé primaire.

Troisième forme normale (3NF): Nous disons qu'une relation est en 3NF si elle est en 2NF et n'a pas de dépendances transitives.

Forme normale de Boyce-Codd (BCNF): Une relation est dite en BCNF si et seulement si chaque déterminant de la relation est une clé candidate.

Quatrième forme normale (4NF): Une relation est dite en 4NF si elle est en BCNF et ne contient pas de dépendance à plusieurs valeurs.

Cinquième forme normale (5NF): Une relation est dite en 5NF si et seulement si chaque dépendance de jointure en relation est impliquée par les clés de relation candidates.

Forme normale de clé de domaine (DKNF): Nous disons qu'une relation est en DKNF si elle est exempte de toute anomalie de modification. Les anomalies d'insertion, de suppression et de mise à jour sont soumises à des anomalies de modification

Seel également

Bases de normalisation de la base de données

14
rahul

C'est une technique pour garantir la cohérence de vos données, en éliminant la duplication. Ainsi, une base de données dans laquelle les mêmes informations sont stockées dans plus d'une table n'est pas normalisée .

Voir l'article Wikipedia sur Normalisation de la base de données .

(C'est une technique générale pour les bases de données relationnelles, non spécifique à MySQL.)

3
RichieHindle

check this post a des suggestions utiles

Tutoriel de Barry sur la compréhension d'un schéma de base de données

http://www.youtube.com/watch?v=KqvIGYjcLQ4 
2
Narayan

Lors de la création d'un schéma de base de données pour votre application, vous devez vous assurer que vous évitez de stocker des informations dans plusieurs colonnes sur différentes tables.

Comme chaque table de votre base de données identifie une entité significative dans votre application, un identifiant unique est une colonne incontournable pour elles.

Maintenant, tout en décidant du schéma de stockage, divers types de relations sont identifiés entre ces entités (tables), à savoir, un à un, un à plusieurs, plusieurs à plusieurs.

  1. Pour une relation un à un (par exemple, un étudiant a un rang unique dans la classe), la même table peut être utilisée pour stocker des colonnes (des deux tables).
  2. Pour une relation un-à-plusieurs (par exemple, un semestre peut avoir plusieurs cours), une clé étrangère est en cours de création dans une table parent.
  3. Pour une relation plusieurs-à-plusieurs (par exemple, un professeur s'occupe de nombreux étudiants et vice-versa), une troisième table doit être créée (avec la clé primaire des deux tables comme clé composite) et les données associées des deux. les tables seront stockées.

Une fois que vous aurez assisté à tous ces scénarios, votre schéma db sera normalisé à 4NF.

2
a6hi5h3k

Dans le domaine de la conception de bases de données relationnelles, la normalisation est un moyen systématique de garantir qu'une structure de base de données est adaptée aux requêtes à usage général et exempte de certaines caractéristiques indésirables - anomalies d'insertion, de mise à jour et de suppression - qui pourraient entraîner une perte d'intégrité des données .[1] E.F. Codd, l'inventeur du modèle relationnel, a introduit le concept de normalisation et ce que nous connaissons maintenant comme la première forme normale en 1970 [2]. Codd a ensuite défini les deuxième et troisième formes normales en 1971 [3] et Codd et Raymond F. Boyce ont défini la forme normale de Boyce-Codd en 1974. [4] Des formes normales supérieures ont été définies par d'autres théoriciens au cours des années suivantes, la plus récente étant la sixième forme normale introduite par Chris Date, Hugh Darwen et Nikos Lorentzos en 2002. [5]

De manière informelle, une table de base de données relationnelle (la représentation informatisée d'une relation) est souvent décrite comme "normalisée" si elle se présente sous la troisième forme normale (3NF). [6] La plupart des tables 3NF sont exemptes d'anomalies d'insertion, de mise à jour et de suppression, c'est-à-dire que dans la plupart des cas, les tables 3NF adhèrent à BCNF, 4NF et 5NF (mais généralement pas 6NF).

Un élément standard de la conception de la base de données est que le concepteur doit créer une conception entièrement normalisée; une dénormalisation sélective peut ensuite être effectuée pour des raisons de performances. [7] Cependant, certaines disciplines de modélisation, telles que l'approche de modélisation dimensionnelle de la conception d'entrepôt de données, recommandent explicitement des conceptions non normalisées, c'est-à-dire des conceptions qui en grande partie n'adhèrent pas au 3NF. [8]

Modifier: Source: http://en.wikipedia.org/wiki/Database_normalization

0
Ali