W tym miejscu staram się wyjaśnić normalizację w kategoriach laika. Po pierwsze, jest to coś, co dotyczy relacyjnych baz danych (Oracle, Access, MySQL), więc nie dotyczy to tylko MySQL.
Normalizacja polega na upewnieniu się, że każda tabela ma tylko minimalne pola i pozbyciu się zależności. Wyobraź sobie, że masz rekord pracownika, a każdy pracownik należy do działu. Jeśli przechowujesz dział jako pole wraz z innymi danymi pracownika, masz problem - co się stanie, jeśli dział zostanie usunięty? Musisz zaktualizować wszystkie pola działu i istnieje możliwość błędu. A co, jeśli niektórzy pracownicy nie mają działu (może nowo przydzielonego?). Teraz będą wartości null.
Tak więc, w skrócie, normalizacja polega na unikaniu pól, które byłyby puste, i upewnieniu się, że wszystkie pola w tabeli należą tylko do jednej domeny opisywanych danych. Na przykład w tabeli pracowników pola mogą być id, nazwisko, numer PESEL, ale te trzy pola nie mają nic wspólnego z działem. Tylko identyfikator pracownika opisuje, do którego działu należy pracownik. Oznacza to, że dział, w którym znajduje się pracownik, powinien znajdować się w innym stole.
Oto prosty proces normalizacji.
EMPLOYEE ( < employee_id >, name, social_security, department_name)
Jak wyjaśniono, nie jest to znormalizowane. Znormalizowany formularz może wyglądać tak
EMPLOYEE ( < employee_id >, name, social_security)
Tutaj tabela Pracownik odpowiada tylko za jeden zestaw danych. Więc gdzie przechowujemy, do którego działu należy pracownik? W innym stole
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
To nie jest optymalne. Co się stanie, jeśli zmieni się nazwa działu? (cały czas zdarza się to w rządzie USA). Dlatego lepiej to zrobić
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
Istnieje pierwsza postać normalna, druga postać normalna i trzecia postać normalna. Ale jeśli nie studiujesz kursu DB, zwykle wybieram najbardziej znormalizowaną formę, jaką mogę zrozumieć.
Mam nadzieję, że to pomoże.