Mysql
 sql >> Base de données >  >> RDS >> Mysql

Normalisation dans MYSQL

J'essaie d'essayer d'expliquer la normalisation en termes simples ici. 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 a les seuls champs minimaux et à se débarrasser des dépendances. Imaginez que vous ayez un dossier d'employé et que chaque employé appartienne à un service. Si vous stockez le service en tant que champ avec les autres données de l'employé, vous avez un problème :que se passe-t-il si un service est supprimé ? Vous devez mettre à jour tous les champs du département, et il y a possibilité d'erreur. Et que se passe-t-il si certains employés n'ont pas de département (nouvellement affecté, peut-être ?). Maintenant, il y aura des valeurs nulles.

Donc la normalisation, en bref, est d'éviter d'avoir des champs qui seraient nuls, et de s'assurer que tous les champs de la table n'appartiennent qu'à un seul domaine de données à décrire. Par exemple, dans la table des employés, les champs pourraient être id, nom, numéro de sécurité sociale, mais ces trois champs n'ont rien à voir avec le service. Seul l'identifiant de l'employé décrit le service auquel appartient l'employé. Cela implique donc que le département dans lequel se trouve un employé doit figurer 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 Employee n'est responsable que d'un seul ensemble de données. Alors, où stockons-nous à quel département appartient l'employé ? Dans un autre tableau

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Ce n'est pas optimal. Que se passe-t-il 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 vous aidera.