Normalizace databáze (vysvětleno v jednoduché angličtině)
Úvod do normalizace databáze
Normalizace databáze je proces používaný k uspořádání databáze do tabulek a sloupců. Hlavní myšlenkou je, že tabulka by měla být o konkrétním tématu a měla by obsahovat pouze podpůrná témata. Jako příklad si vezměte tabulku obsahující informace, kde data obsahují prodejce a zákazníky sloužící několika účelům:
- Identifikujte prodejce ve vaší organizaci
- Seznam všech zákazníků, na které vaše společnost volá prodat produkt
- Určete, kteří prodejci volají na konkrétní zákazníky.
Omezením tabulky na jeden účel snížíte počet duplicitních dat obsažených ve vaší databázi. To eliminuje některé problémy vyplývající z úprav databáze.
K dosažení těchto cílů použijeme některá zavedená pravidla. Při používání těchto pravidel se vytvářejí nové tabulky. Postup od nepoddajného k optimalizovanému prochází několika běžnými formami.
Existují tři normální formy, které většina databází používá. Vzhledem k tomu, že tabulky uspokojují každou následující formu normalizace databáze, stávají se méně náchylnými k anomáliím modifikací databáze a více se zaměřují na jediný účel nebo téma. Než budeme pokračovat, ujistěte se, že rozumíte definici databázové tabulky.
Důvody pro normalizaci databáze
Existují tři hlavní důvody pro normalizaci databáze. Prvním z nich je minimalizace duplicitních dat, druhým je minimalizace nebo vyloučení problémů s úpravami dat a třetí je zjednodušení dotazů.
Jak procházíme různými stavy normalizace, probereme, jak jednotlivé formy řeší tyto problémy, ale nejprve se podívejme na některá data, která nebyla normalizována, a probereme možná úskalí.
Myslím, že jakmile pochopíte problémy, oceníte normalizaci. Zvažte následující tabulku:
První věc, kterou si všimnete, je, že tato tabulka slouží mnoha účelům, včetně:
- Identifikace prodejců organizace
- Seznam prodejů kanceláře a telefonní čísla
- Spojení prodejce s prodejní kanceláří
- Zobrazení zákazníků každého prodejce
Jako DBA to vyvolává červenou vlajku. Obecně bych rád viděl tabulky, které mají jeden účel. Mít stůl k mnoha účelům přináší mnoho výzev; jmenovitě duplikace dat, problémy s aktualizací dat a zvýšené úsilí při dotazování na data.
Anomálie duplikace a modifikace dat
Všimněte si, že pro každého SalesPersona jsme uvedli jak SalesOffice, tak OfficeNumber. Existují duplicitní údaje o prodejci. Duplikované informace představují dva problémy:
- Zvyšuje úložiště a snižuje výkon.
- Udržování změn dat je obtížnější.
Například:
Zvažte, zda přesuneme kancelář v Chicagu do Evanstonu v IL. Abychom to v naší tabulce správně promítli, musíme aktualizovat záznamy pro všechny prodejce aktuálně v Chicagu. Naše tabulka je malým příkladem, ale můžete vidět, zda byla větší, že by to mohlo zahrnovat stovky aktualizací.
Tyto situace jsou anomálie úprav. Normalizace databáze je opravuje. Mohou nastat tři modifikační anomálie:
Vložit anomálie
Existují fakta, která nemůžeme zaznamenat, dokud neznáme informace pro celý řádek. V našem příkladu nemůžeme zaznamenat novou prodejní kancelář, dokud neznáme také osobu prodávajícího. Proč? Protože k vytvoření záznamu potřebujeme poskytnout primární klíč. V našem případě se jedná o EmployeeID.
Aktualizovat anomálie
V tomto případě máme v několika řádcích stejné informace. Pokud se například změní číslo kanceláře, je třeba provést několik aktualizací. Pokud neaktualizujeme všechny řádky, objeví se nesrovnalosti.
Anomálie smazání
Smazání řádku způsobí odstranění více než jedné sady faktů. Například pokud John Hunt odejde do důchodu, odstranění tohoto řádku způsobí ztrátu informací o newyorské kanceláři.
Problémy s vyhledáváním a tříděním
Posledním důvodem, který zvážíme, je snazší vyhledávání a třídění vašich údajů. Pokud chcete v tabulce SalesStaff vyhledat konkrétního zákazníka, například Ford, musíte napsat dotaz jako
SELECT SalesOfficeFROM SalesStaffWHERE Customer1 = ‘Ford’ OR Customer2 = ‘Ford’ OR Customer3 = ‘Ford’
Je zřejmé, že pokud zákazník nějak v jednom sloupci by byl náš dotaz jednodušší. Zvažte také, zda chcete spustit dotaz a seřadit podle zákazníka.
Díky naší současné tabulce je to těžké. Budete muset použít tři samostatné dotazy UNION!Tyto anomálie můžete vyloučit nebo snížit rozdělením dat do různých tabulek. Tím se data vloží do tabulek, které slouží jednomu účelu.
Proces redesignu tabulky je normalizace databáze.
Definice normalizace databáze
Existují tři běžné formy normalizace databáze: 1., 2. a 3. normální forma. Jsou také zkráceny jako 1NF, 2NF a 3NF.
Existuje několik dalších formulářů, například BCNF, ale považuji je za pokročilé a na začátku není příliš nutné se je učit.
Formuláře jsou progresivní, což znamená, že ke kvalifikaci pro 3. normální formulář musí tabulka nejprve splňovat pravidla pro 2. normální formulář a 2. normální formulář musí dodržovat pravidla pro 1. normální formulář. Než si podrobně promluvíme o různých formách a pravidlech, shrňme si různé formy:
- První normální formulář – informace jsou uloženy v relační tabulce s každým sloupcem obsahujícím atomové hodnoty. Neexistují žádné opakující se skupiny sloupců.
- Druhý normální formulář – tabulka je v první normální formě a všechny sloupce závisí na primárním klíči tabulky.
- Třetí normální forma – tabulka je ve druhé normální formě a všechny jeho sloupce nejsou přechodně závislé na primárním klíči.
Pokud pravidla nedávají příliš velký smysl, nebojte se. Propojil jsem článek, abych vám pomohl porozumět jim.
Prozatím je důležité pochopit, že existují tři pravidla pro normalizaci databáze, která na sebe navzájem navazují. Někteří lidé považují normalizaci databáze za komplikovanou.
ale nemusí to být, a jakmile to pochopíte, stane se intuitivní.