Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Normalisierung in MYSQL

Ich versuche hier zu versuchen, die Normalisierung in Laiensprache zu erklären. Zunächst einmal gilt es für relationale Datenbanken (Oracle, Access, MySQL), also nicht nur für MySQL.

Bei der Normalisierung geht es darum, sicherzustellen, dass jede Tabelle nur minimale Felder enthält, und um Abhängigkeiten zu beseitigen. Stellen Sie sich vor, Sie haben einen Mitarbeiterdatensatz und jeder Mitarbeiter gehört einer Abteilung an. Wenn Sie die Abteilung zusammen mit den anderen Daten des Mitarbeiters als Feld speichern, haben Sie ein Problem - was passiert, wenn eine Abteilung entfernt wird? Sie müssen alle Abteilungsfelder aktualisieren, und es besteht die Möglichkeit von Fehlern. Und was ist, wenn einige Mitarbeiter keine Abteilung haben (vielleicht neu zugewiesen?). Jetzt gibt es Nullwerte.

Kurz gesagt besteht die Normalisierung darin, zu vermeiden, dass Felder vorhanden sind, die null sind, und sicherzustellen, dass alle Felder in der Tabelle nur zu einer zu beschreibenden Datendomäne gehören. In der Mitarbeitertabelle könnten die Felder beispielsweise ID, Name und Sozialversicherungsnummer sein, aber diese drei Felder haben nichts mit der Abteilung zu tun. Nur die Mitarbeiter-ID beschreibt, zu welcher Abteilung der Mitarbeiter gehört. Das bedeutet also, dass die Abteilung, in der sich ein Mitarbeiter befindet, in einer anderen Tabelle stehen sollte.

Hier ist ein einfacher Normalisierungsprozess.

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

Dies ist, wie erläutert, nicht normalisiert. Eine normalisierte Form könnte so aussehen

EMPLOYEE ( < employee_id >, name, social_security)

Dabei ist die Employee-Tabelle nur für einen Datensatz zuständig. Wo speichern wir also, zu welcher Abteilung der Mitarbeiter gehört? In einer anderen Tabelle

EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )

Das ist nicht optimal. Was ist, wenn sich der Abteilungsname ändert? (es passiert in der US-Regierung die ganze Zeit). Daher ist es besser, dies zu tun

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

Es gibt die erste Normalform, die zweite Normalform und die dritte Normalform. Aber wenn Sie keinen DB-Kurs studieren, wähle ich normalerweise nur die normalisierteste Form, die ich verstehen kann.

Hoffe das hilft.