database normalization tutorial
Tento výukový program vysvětlí, co je Normalizace databáze a různé normální formuláře jako 1NF 2NF 3NF a BCNF s příklady kódu SQL:
Normalizace databáze je dobře známá technika používaná pro návrh schématu databáze.
Hlavním účelem použití normalizační techniky je snížit redundanci a závislost dat. Normalizace nám pomáhá rozdělit velké tabulky na několik malých tabulek definováním logického vztahu mezi těmito tabulkami.
Co se naučíte:
- Co je normalizace databáze?
- Závěr
Co je normalizace databáze?
Normalizace databáze nebo normalizace SQL nám pomáhá seskupit související data do jedné tabulky. Jakákoli atributivní data nebo nepřímo související data jsou vložena do různých tabulek a tyto tabulky jsou spojeny s logickým vztahem mezi nadřazenými a podřízenými tabulkami.
V roce 1970 přišel Edgar F. Codd s konceptem normalizace. Sdílel příspěvek s názvem „Relační model dat pro velké sdílené banky“, ve kterém navrhl „First Normal Form (1NF)“.
Výhody normalizace DBMS
Normalizace databáze poskytuje následující základní výhody:
- Normalizace zvyšuje konzistenci dat, protože zabraňuje duplicitě dat tím, že data ukládá pouze na jednom místě.
- Normalizace pomáhá při seskupování podobných nebo souvisejících dat ve stejném schématu, což vede k lepšímu seskupení dat.
- Normalizace zlepšuje vyhledávání rychleji, protože indexy lze vytvářet rychleji. Normalizovaná databáze nebo tabulka se tedy používá pro OLTP (online zpracování transakcí).
Nevýhody normalizace databáze
Normalizace DBMS má následující nevýhody:
- Nemůžeme najít přidružená data, například produktu nebo zaměstnance, na jednom místě a musíme se připojit k více než jedné tabulce. To způsobí zpoždění při načítání dat.
- Normalizace tedy není dobrou volbou v transakcích OLAP (online analytické zpracování).
Než budeme pokračovat, pochopme následující podmínky:
- Subjekt: Entita je skutečný objekt, kde jsou data spojená s takovým objektem uložena v tabulce. Příkladem takových objektů jsou zaměstnanci, oddělení, studenti atd.
- Atributy: Atributy jsou vlastnosti entity, které poskytují určité informace o entitě. Například, pokud jsou tabulky entity, pak sloupce jsou jejich atributy.
Druhy běžných formulářů
# 1) 1NF (první normální forma)
Podle definice lze entitu, která nemá žádné opakující se sloupce nebo datové skupiny, nazvat jako první normální formulář. V prvním normálním formuláři je každý sloupec jedinečný.
Takto by vypadala naše tabulka Zaměstnanci a oddělení, kdyby byla v první normální formě (1NF):
empNum | příjmení | jméno | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Zvedák | Účty | New York | Spojené státy |
1002 | Schwatz | Mike | Technologie | New York | Spojené státy |
1009 | Pohár | Harry | HR | Berlín | Německo |
1007 | Harvey | Parker | Správce | Londýn | Spojené království |
1007 | Harvey | Parker | HR | Londýn | Spojené království |
Zde byly všechny sloupce tabulek Zaměstnanci i Oddělení sloučeny do jednoho a není třeba spojovat sloupce, jako je deptNum, protože všechna data jsou k dispozici na jednom místě.
Ale taková tabulka se všemi požadovanými sloupci by byla nejen obtížně spravovatelná, ale také obtížně proveditelná a také neefektivní z hlediska úložiště.
# 2) 2NF (druhá normální forma)
Podle definice je entita, která má 1NF a jeden z jejích atributů, definována jako primární klíč a zbývající atributy jsou závislé na primárním klíči.
Následuje příklad toho, jak by vypadala tabulka zaměstnanců a oddělení:
Tabulka zaměstnanců:
empNum | příjmení | jméno |
---|---|---|
1001 | Andrews | Zvedák |
1002 | Schwatz | Mike |
1009 | Pohár | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tabulka oddělení:
odd | deptName | deptCity | deptCountry |
---|---|---|---|
1 | Účty | New York | Spojené státy |
dva | Technologie | New York | Spojené státy |
3 | HR | Berlín | Německo |
4 | Správce | Londýn | Spojené království |
Tabulka EmpDept:
empDeptID | empNum | odd |
---|---|---|
1 | 1001 | 1 |
dva | 1002 | dva |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Zde můžeme pozorovat, že jsme rozdělili tabulku ve formě 1NF do tří různých tabulek. tabulka Zaměstnanci je entitou o všech zaměstnancích společnosti a její atributy popisují vlastnosti každého zaměstnance. Primární klíč pro tuto tabulku je empNum.
Podobně tabulka Oddělení je entitou o všech odděleních ve společnosti a její atributy popisují vlastnosti každého oddělení. Primárním klíčem pro tuto tabulku je deptNum.
Ve třetí tabulce jsme kombinovali primární klíče obou tabulek. Primární klíče tabulek Zaměstnanci a Oddělení jsou v této třetí tabulce označována jako Cizí klíče.
Pokud uživatel chce výstup podobný tomu, který jsme měli v 1NF, musí se uživatel připojit ke všem třem tabulkám pomocí primárních klíčů.
Ukázkový dotaz bude vypadat takto:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (třetí normální forma)
Podle definice je tabulka považována za třetí normální, pokud je tabulka / entita již ve druhé normální formě a sloupce tabulky / entity jsou netransitivně závislé na primárním klíči.
Pojďme pochopit netranzitivní závislost pomocí následujícího příkladu.
Řekněme tabulku s názvem, Zákazník má následující sloupce:
Zákaznické identifikační číslo - Primární klíč identifikující jedinečného zákazníka
ZákazníkZIP - PSČ lokality, ve které zákazník bydlí
CustomerCity - Město, ve kterém zákazník bydlí
Ve výše uvedeném případě je sloupec CustomerCity závislý na sloupci CustomerZIP a sloupec CustomerZIP je závislý na CustomerID.
Výše uvedený scénář se nazývá přechodná závislost sloupce CustomerCity na CustomerID, tj. Primární klíč. Po pochopení přechodné závislosti pojďme nyní diskutovat o problému s touto závislostí.
Může existovat možný scénář, kdy dojde k nechtěné aktualizaci tabulky pro aktualizaci CustomerZIP na PSČ jiného města bez aktualizace CustomerCity, čímž databázi necháte v nekonzistentním stavu.
Abychom tento problém vyřešili, musíme odstranit přechodnou závislost, kterou lze provést vytvořením jiné tabulky, řekněme tabulky CustZIP, která obsahuje dva sloupce, tj. CustomerZIP (jako primární klíč) a CustomerCity.
Sloupec CustomerZIP v tabulce Zákazník je cizí klíč pro ZákazníkZIP v tabulce CustZIP. Tento vztah zajišťuje, že v aktualizacích, kde je aktualizován CustomerZIP bez provedení změn v CustomerCity, není žádná anomálie.
# 4) Boyce-Codd normální forma (3,5 normální forma)
Podle definice je tabulka považována za normální formu Boyce-Codd, pokud je již ve třetí normální formě a pro každou funkční závislost mezi A a B by měla být A super klíčem.
Tato definice zní trochu komplikovaně. Zkusme to prolomit, abychom tomu lépe porozuměli.
- Funkční závislost: O atributech nebo sloupcích tabulky se říká, že jsou funkčně závislé, když atribut nebo sloupec tabulky jednoznačně identifikuje jiné atributy nebo sloupce stejné tabulky.
Například, sloupec empNum nebo číslo zaměstnance jednoznačně identifikuje ostatní sloupce, jako je jméno zaměstnance, plat zaměstnance atd. v tabulce Zaměstnanec. - Super klíč: Jeden klíč nebo skupina více klíčů, které by mohly jednoznačně identifikovat jeden řádek v tabulce, lze označit jako Super klíč. Obecně známe takové klávesy jako Composite Keys.
Podívejme se na následující scénář, abychom pochopili, kdy nastává problém s třetí normální formou a jak se zachrání Boyce-Codd normální forma.
podřetězec (0,0) Java
empNum | jméno | empCity | deptName | oddělení |
---|---|---|---|---|
1001 | Zvedák | New York | Účty | Raymond |
1001 | Zvedák | New York | Technologie | Donalde |
1002 | Harry | Berlín | Účty | Samara |
1007 | Parker | Londýn | HR | Elizabeth |
1007 | Parker | Londýn | Infrastruktura | Tom |
Ve výše uvedeném příkladu pracují zaměstnanci s empNum 1001 a 1007 ve dvou různých odděleních. Každé oddělení má vedoucího oddělení. Pro každé oddělení může existovat více vedoucích oddělení. Stejně jako u oddělení účtů jsou Raymond a Samara dva vedoucí oddělení.
V tomto případě jsou empNum a deptName super klíče, což znamená, že deptName je hlavním atributem. Na základě těchto dvou sloupců můžeme jednoznačně identifikovat každý řádek.
Také deptName závisí na deptHead, což znamená, že deptHead je atribut, který není primární. Toto kritérium diskvalifikuje tabulku, aby nebyla součástí BCNF.
Abychom to vyřešili, rozdělíme tabulku na tři různé tabulky, jak je uvedeno níže:
Tabulka zaměstnanců:
empNum | jméno | empCity | odd |
---|---|---|---|
1001 | Zvedák | New York | D1 |
1001 | Zvedák | New York | D2 |
1002 | Harry | Berlín | D1 |
1007 | Parker | Londýn | D3 |
1007 | Parker | Londýn | D4 |
Tabulka oddělení:
odd | deptName | oddělení |
---|---|---|
D1 | Účty | Raymond |
D2 | Technologie | Donalde |
D1 | Účty | Samara |
D3 | HR | Elizabeth |
D4 | Infrastruktura | Tom |
# 5) Čtvrtá normální forma (4 normální forma)
Podle definice je tabulka ve čtvrté normální formě, pokud nemá dvě nebo více nezávislých údajů popisujících příslušnou entitu.
# 6) Pátá normální forma (5 normální forma)
Tabulka může být považována za pátý normální formulář, pouze pokud splňuje podmínky pro čtvrtý normální formulář a lze ji rozdělit do více tabulek bez ztráty jakýchkoli dat.
Často kladené otázky a odpovědi
Otázka 1) Co je normalizace v databázi?
Odpovědět: Normalizace databáze je návrhová technika. Pomocí toho můžeme navrhnout nebo přepracovat schémata v databázi, abychom snížili nadbytečná data a závislost dat rozdělením dat na menší a relevantnější tabulky.
Otázka č. 2) Jaké jsou různé typy normalizace?
Odpovědět: Následují různé typy normalizačních technik, které lze použít k návrhu schémat databáze:
- První normální forma (1NF)
- Druhá normální forma (2NF)
- Třetí normální forma (3NF)
- Boyce-Codd normální forma (3,5 NF)
- Čtvrtý normální tvar (4NF)
- Pátý normální tvar (5NF)
Otázka č. 3) Jaký je účel normalizace?
Odpovědět: Primárním účelem normalizace je snížit redundanci dat, tj. Data by měla být uložena pouze jednou. Tím se zamezí jakýmkoli anomáliím dat, které by mohly nastat, když se pokusíme uložit stejná data do dvou různých tabulek, ale změny se použijí pouze pro jednu a ne pro druhou.
Otázka č. 4) Co je denormalizace?
Odpovědět: Denormalizace je technika ke zvýšení výkonu databáze. Tato technika přidává do databáze nadbytečná data, na rozdíl od normalizované databáze, která odstraňuje nadbytečnost dat.
Děje se to v obrovských databázích, kde je provedení JOIN za účelem získání dat z více tabulek nákladnou záležitostí. Redundantní data jsou tedy uložena ve více tabulkách, aby se zabránilo operacím JOIN.
Závěr
Zatím jsme všichni prošli třemi normalizačními formami databáze.
Teoreticky existují vyšší formy normalizace databáze, jako je Boyce-Codd Normal Form, 4NF, 5NF. 3NF je však široce používanou normalizační formou v produkčních databázích.
Šťastné čtení!!
Doporučené čtení
- Testování databáze pomocí JMeter
- MongoDB Vytvořit zálohu databáze
- Výukový program pro vytváření databáze MongoDB
- Top 10 databázových návrhových nástrojů pro vytváření komplexních datových modelů
- Výkon MongoDB: Výkon uzamčení, chyby stránky a profilování databáze
- Recenze relační databáze Altibase Open Source
- MongoDB Database Profiler pro monitorování dotazů a výkonu
- Jak testovat databázi Oracle