sql >> Databáze >  >> RDS >> Mysql

Normalizace v MYSQL

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.



  1. SQLite SUM

  2. Převeďte desetinný čas na hodiny a minuty

  3. Zastaralé funkce, které je třeba vyjmout ze sady nástrojů – část 3

  4. Složený PRIMARY KEY vynucuje omezení NOT NULL na příslušné sloupce