Snažím se zde laicky vysvětlit normalizaci. Za prvé, je to něco, co platí pro relační databáze (Oracle, Access, MySQL), takže to není jen pro MySQL.
Normalizace je o zajištění toho, aby každá tabulka obsahovala pouze minimální pole, a o odstranění závislostí. Představte si, že máte záznam o zaměstnancích a každý zaměstnanec patří do oddělení. Pokud uložíte oddělení jako pole spolu s ostatními daty zaměstnance, máte problém - co se stane, když je oddělení odstraněno? Musíte aktualizovat všechna pole oddělení a může dojít k chybě. A co když někteří zaměstnanci nemají oddělení (třeba nově přidělené?). Nyní budou hodnoty null.
Takže normalizace, stručně řečeno, je vyhnout se tomu, aby pole byla nulová, a zajistit, aby všechna pole v tabulce patřila pouze do jedné domény popisovaných dat. Například v tabulce zaměstnanců mohou být pole id, jméno, rodné číslo, ale tato tři pole nemají nic společného s oddělením. Pouze ID zaměstnance popisuje, do kterého oddělení zaměstnanec patří. Z toho tedy vyplývá, že ve kterém oddělení se zaměstnanec nachází, by mělo být v jiné tabulce.
Zde je jednoduchý proces normalizace.
EMPLOYEE ( < employee_id >, name, social_security, department_name)
To není normalizováno, jak bylo vysvětleno. Normalizovaný formulář by mohl vypadat
EMPLOYEE ( < employee_id >, name, social_security)
Zde je tabulka Zaměstnanec zodpovědná pouze za jednu sadu dat. Kam tedy uložíme, do kterého oddělení zaměstnanec patří? V jiné tabulce
EMPLOYEE_DEPARTMENT ( < employee_id >, department_name )
To není optimální. Co když se změní název oddělení? (to se děje ve vládě USA neustále). Proto je lepší to udělat
EMPLOYEE_DEPARTMENT ( < employee_id >, department_id )
DEPARTMENT ( < department_id >, department_name )
Existuje první normální forma, druhá normální forma a třetí normální forma. Ale pokud nestudujete kurz DB, obvykle volím tu nejnormalizovanější formu, které rozumím.
Doufám, že to pomůže.