Normalizace DBMS: Příklad databáze 1NF, 2NF, 3NF
Co je normalizace databáze?
Normalizace je technika návrhu databáze, která snižuje redundanci dat a eliminuje nežádoucí vlastnosti, jako jsou anomálie vkládání, aktualizace a mazání. Pravidla normalizace rozdělují větší tabulky na menší tabulky a propojují je pomocí vztahů. Účelem normalizace v SQL je eliminovat nadbytečná (opakující se) data a zajistit logické ukládání dat.
Vynálezce relační model Edgar Codd navrhl teorii normalizace dat se zavedením první normální formy a pokračoval v rozšiřování teorie o druhou a třetí normální formu. Later připojil se k Raymondovi F. Boyceovi, aby rozvinul teorii normální formy Boyce-Codda.
Typy normálních forem v DBMS
Zde je seznam normálních formulářů v SQL:
- 1NF (první normální forma): Zajišťuje, že databázová tabulka je organizována tak, aby každý sloupec obsahoval atomické (nedělitelné) hodnoty a každý záznam byl jedinečný. To eliminuje opakující se skupiny, čímž se data strukturují do tabulek a sloupců.
- 2NF (druhá normální forma): Staví na 1NF od Potřebujeme odstranit nadbytečná data z tabulky, která je aplikována na více řádků. a umístit je do samostatných tabulek. Vyžaduje, aby všechny neklíčové atributy byly na primárním klíči plně funkční.
- 3NF (třetí normální forma): Rozšiřuje 2NF tím, že zajišťuje, že všechny neklíčové atributy jsou nejen plně funkční na primárním klíči, ale jsou také na sobě nezávislé. Tím se eliminuje tranzitivní závislost.
- BCNF (Boyce-Codd normální forma): Upřesnění 3NF, které řeší anomálie, které 3NF nezpracovává. Vyžaduje, aby každý determinant byl kandidátským klíčem, což zajišťuje ještě přísnější dodržování normalizačních pravidel.
- 4NF (čtvrtá normální forma): Řeší vícehodnotové závislosti. Zajišťuje, že v záznamu není více nezávislých vícehodnotových faktů o entitě.
- 5NF (pátá normální forma): Také známý jako „Projection-Join Normal Form“ (PJNF) se týká rekonstrukce informací z menších, odlišně uspořádaných datových kusů.
- 6NF (Šestá normální forma): Teoretické a málo implementované. Zabývá se časovými daty (zvládá změny v čase) dalším rozkladem tabulek, aby se odstranila veškerá nečasová redundance.
Teorie normalizace dat v MySQL server se stále vyvíjí. Například diskuse probíhají i na 6th Normální forma. Ve většině praktických aplikací však normalizace dosahuje svých nejlepších výsledků ve 3rd Normální forma. Vývoj normalizace v teoriích SQL je znázorněn níže -
Normalizace databáze s příklady
Databáze Příklad normalizace lze snadno pochopit pomocí případové studie. Předpokládejme, že videotéka spravuje databázi vypůjčených filmů. Bez jakékoli normalizace v databázi jsou všechny informace uloženy v jedné tabulce, jak je uvedeno níže. Pojďme pochopit normalizační databázi s příkladem normalizace s řešením:
Tady vidíte Sloupec Vypůjčené filmy má více hodnot. Nyní se přesuneme do 1. normálních formulářů:
První normální forma (1NF)
- Každá buňka tabulky by měla obsahovat jednu hodnotu.
- Každý záznam musí být jedinečný.
Výše uvedená tabulka v 1NF-
Příklad 1NF
Než budeme pokračovat, pochopme několik věcí –
Co je KEY v SQL
A KEY v SQL je hodnota používaná k jedinečné identifikaci záznamů v tabulce. SQL KEY je jeden sloupec nebo kombinace více sloupců sloužící k jednoznačné identifikaci řádků nebo n-tic v tabulce. SQL Key se používá k identifikaci duplicitních informací a také pomáhá vytvořit vztah mezi více tabulkami v databázi.
Poznámka: Sloupce v tabulce, které NEJSOU použity k jedinečné identifikaci záznamu, se nazývají neklíčové sloupce.
Co je primární klíč?
Primární je hodnota jednoho sloupce, která se používá k jedinečné identifikaci databázového záznamu.
Má následující atributy
- A primární klíč nemůže být NULL
- Hodnota primárního klíče musí být jedinečná
- Hodnoty primárního klíče by se měly měnit jen zřídka
- Primárnímu klíči musí být při vložení nového záznamu přidělena hodnota.
Co je složený klíč?
Složený klíč je primární klíč složený z více sloupců, který slouží k jednoznačné identifikaci záznamu
V naší databázi máme dva lidi se stejným jménem Robert Phil, ale žijí na různých místech.
K jednoznačné identifikaci záznamu tedy vyžadujeme celé jméno i adresu. To je složený klíč.
Přesuňme se do druhé normální formy 2NF
Druhá normální forma (2NF)
- Pravidlo 1- Být v 1NF
- Pravidlo 2 – Primární klíč s jedním sloupcem, který není funkčně závislý na žádné podmnožině vztahu kandidátského klíče
Je jasné, že se nemůžeme pohnout kupředu, abychom vytvořili naši jednoduchou databázi ve 2nd Normalizační formulář, pokud nerozdělíme tabulku výše.
Naši tabulku 1NF jsme rozdělili do dvou tabulek viz. Tabulka 1 a Tabulka2. Tabulka 1 obsahuje informace o členech. Tabulka 2 obsahuje informace o vypůjčených filmech.
Zavedli jsme nový sloupec nazvaný Membership_id, což je primární klíč pro tabulku 1. Záznamy lze v tabulce 1 jednoznačně identifikovat pomocí ID členství
Databáze – cizí klíč
V tabulce 2 je Membership_ID cizí klíč
Cizí klíč odkazuje na primární klíč jiné tabulky! Pomáhá propojit vaše stoly
- Cizí klíč může mít jiný název než primární klíč
- Zajistí, aby řádky v jedné tabulce měly odpovídající řádky v jiné
- Na rozdíl od primárního klíče nemusí být jedinečné. Nejčastěji nejsou
- Cizí klíče mohou být null, i když primární klíče nemohou
Proč potřebujete cizí klíč?
Předpokládejme, že nováček vloží záznam do tabulky B, např
Do svého cizího klíče budete moci vkládat pouze hodnoty, které existují v jedinečném klíči v nadřazené tabulce. To pomáhá v referenční integritě.
Výše uvedený problém lze překonat deklarováním ID členství z Tabulka2 jako cizího klíče ID členství z Tabulka1
Pokud se nyní někdo pokusí vložit do pole ID členství hodnotu, která v nadřazené tabulce neexistuje, zobrazí se chyba!
Co jsou tranzitivní funkční závislosti?
Přechodník funkční závislost je při změně neklíčového sloupce, může způsobit změnu kteréhokoli z ostatních neklíčových sloupců
Zvažte tabulku 1. Změna neklíčového sloupce Celé jméno může změnit oslovení.
Přesuňme se do 3NF
Třetí normální forma (3NF)
- Pravidlo 1- Být v 2NF
- Pravidlo 2- Nemá žádné tranzitivní funkční závislosti
Abychom přesunuli náš stůl 2NF na 3NF, musíme znovu náš stůl rozdělit.
Příklad 3NF
Níže je příklad 3NF v databázi SQL:
Znovu jsme rozdělili naše tabulky a vytvořili novou tabulku, ve které jsou uloženy pozdravy.
Neexistují žádné tranzitivní funkční závislosti, a proto je naše tabulka v 3NF
V tabulce 3 je ID pozdravu primárním klíčem a v tabulce 1 je ID pozdravu cizí primárnímu klíči v tabulce 3
Nyní je náš malý příklad na úrovni, kterou nelze dále rozkládat za účelem dosažení vyšších normálních forem normalizace v DBMS. Ve skutečnosti je již ve vyšších normalizačních formách. Ve složitých databázích je obvykle zapotřebí samostatného úsilí o přechod na další úrovně normalizace dat. O dalších úrovních normalizace v DBMS však budeme stručně diskutovat dále.
Normální forma Boyce-Codda (BCNF)
I když je databáze ve 3rd Normální forma, přesto by došlo k anomáliím, pokud má více než jednu Kandidát Klíč.
Někdy je BCNF také označován jako 3.5 Normální forma.
Čtvrtá normální forma (4NF)
Pokud žádná instance databázové tabulky neobsahuje dvě nebo více nezávislých a vícehodnotových dat popisujících příslušnou entitu, pak je ve 4th Normální forma.
Pátá normální forma (5NF)
Tabulka je v 5th Normal Form pouze v případě, že je ve 4NF a nelze jej rozložit na libovolný počet menších tabulek bez ztráty dat.
Navržena šestá normální forma (6NF).
6th Normální forma není standardizována, nicméně je již nějakou dobu diskutována odborníky na databáze. Doufejme, že bychom měli jasnou a standardizovanou definici pro 6th Normální forma v blízké budoucnosti…
Výhody normálního tvaru
- Zlepšení konzistence dat: Normalizace zajišťuje, že každý kus dat je uložen pouze na jednom místě, čímž se snižuje šance na nekonzistentnost dat. Když jsou data aktualizována, je třeba je aktualizovat pouze na jednom místě, což zajišťuje konzistenci.
- Snížení redundance dat: Normalizace pomáhá eliminovat duplicitní data jejich rozdělením do více souvisejících tabulek. To může ušetřit úložný prostor a také zefektivnit databázi.
- Zlepšení výkonu dotazu: Normalizované databáze se často snáze dotazují. Protože jsou data organizována logicky, lze dotazy optimalizovat tak, aby běžely rychleji.
- Udělejte data smysluplnější: Normalizace zahrnuje seskupování dat způsobem, který dává smysl a je intuitivní. To může usnadnit pochopení a použití databáze, zejména pro lidi, kteří databázi nenavrhli.
- Snižte pravděpodobnost anomálií: Anomálie jsou problémy, které mohou nastat při přidávání, aktualizaci nebo mazání dat. Normalizace může snížit pravděpodobnost těchto anomálií tím, že zajistí, aby data byla logicky uspořádána.
Nevýhody normalizace
- Zvýšená složitost: Normalizace může vést ke složitým vztahům. Velké množství tabulek s cizími klíči může být obtížné spravovat, což vede k nejasnostem.
- Snížená flexibilita: Kvůli přísným pravidlům normalizace může být menší flexibilita při ukládání dat, která tato pravidla nedodržují.
- Zvýšené požadavky na úložiště: Zatímco normalizace snižuje redundanci, může být nutné alokovat více úložného prostoru pro umístění dalších tabulek a indexů.
- Režie výkonu: Spojení více stolů může být z hlediska výkonu nákladné. Čím více jsou data normalizována, tím více spojení je potřeba, což může zpomalit dobu načítání dat.
- Ztráta kontextu dat: Normalizace rozděluje data do samostatných tabulek, což může vést ke ztrátě obchodního kontextu. Prozkoumání souvisejících tabulek je nezbytné pro pochopení kontextu části dat.
- Potřeba odborných znalostí: Implementace normalizované databáze vyžaduje hluboké pochopení dat, vztahů mezi daty a pravidel normalizace. To vyžaduje odborné znalosti a může to být časově náročné.
To je vše k normalizaci SQL!!!
Proč investovat do čističky vzduchu?
- Návrh databáze je rozhodující pro úspěšnou implementaci systému správy databází, který splňuje datové požadavky podnikového systému.
- Normalizace v DBMS je proces, který pomáhá vytvářet databázové systémy, které jsou nákladově efektivní a mají lepší modely zabezpečení.
- Funkční závislosti jsou velmi důležitou součástí procesu normalizace dat
- Většina databázových systémů jsou normalizované databáze až do třetí normální formy v DBMS.
- Primární klíč jedinečně identifikuje záznam v tabulce a nemůže mít hodnotu null
- Cizí klíč pomáhá připojit tabulku a odkazuje na primární klíč