Vyhnite sa tranzitívnym závislostiam, aby ste pomohli zabezpečiť normalizáciu
Transitívna závislosť v databáze je nepriamy vzťah medzi hodnotami v rovnakej tabuľke, ktorá spôsobuje funkčnú závislosť . Aby ste dosiahli normalizáciu tretej normálnej formy (3NF), musíte odstrániť každú tranzitívnu závislosť.
Zo svojej povahy vyžaduje tranzitívna závislosť tri alebo viac atribútov (alebo databázových stĺpcov), ktoré majú funkčnú závislosť medzi nimi, čo znamená, že stĺpec A v tabuľke sa spolieha na stĺpec B cez stredný stĺpec C.
Pozrime sa, ako to môže fungovať.
Príklad prechodnej závislosti
Authors
Author_ID | autor | kniha | Author_Nationality |
---|---|---|---|
Auth_001 | Karta Orson Scott | Enderova hra | Spojené štáty |
Auth_001 | Karta Orson Scott | Enderova hra | Spojené štáty |
Auth_002 | Margaret Atwood | Príbeh dievčaťa | Kanada |
Vo vyššie uvedenom príklade AUTHORS:
- Book → Author : Tu atribút Book určuje atribút Author . Ak poznáte názov knihy, môžete sa dozvedieť meno autora. Autor však neurčuje Knihu , pretože autor môže napísať viac kníh. Napríklad, len preto, že poznáme meno autora Orson Scott Card, ešte stále nepoznáme názov knihy.
- Autor → Národná autorita : Podobne atribút Autor určuje Národnú autoritu , ale nie opačne; len preto, že vieme štátnosť neznamená, že môžeme určiť autora.
Táto tabuľka však zavádza tranzitívnu závislosť:
- Kniha → Národná autorita: ak poznáme názov knihy, môžeme určiť štátnu príslušnosť pomocou stĺpca Autor.
Vyhnúť sa prechodným závislostiam
Ak chceme zaistiť tretiu normálnu formu, odstráňte tranzitívnu závislosť.
Môžeme začať odstránením stĺpca Kniha z tabuľky Autori a vytvorením samostatnej tabuľky Knihy:
KNIHY
Book_ID | kniha | Author_ID |
---|---|---|
Book_001 | Enderova hra | Auth_001 |
Book_001 | Deti mysle | Auth_001 |
Book_002 | Príbeh dievčaťa | Auth_002 |
Authors
Author_ID | autor | Author_Nationality |
---|---|---|
Auth_001 | Karta Orson Scott | Spojené štáty |
Auth_002 | Margaret Atwood | Kanada |
Opravil to? Skúmame naše závislosti teraz:
Tabuľky KNIHY :
- Book_ID → Book: Kniha závisí od čísla knihy .
- Žiadne iné závislosti v tejto tabuľke neexistujú, takže sme v poriadku. Všimnite si, že cudzí kľúč Autor_ID spája túto tabuľku s tabuľkou AUTORI prostredníctvom primárneho kľúča Author_ID . Vytvorili sme vzťah, aby sme sa vyhli tranzitívnej závislosti, kľúčovému návrhu relačných databáz.
Tabuľka AUTORI :
- Autor_ID → Autor: Autora závisí od ID autora .
- Autor → Národná autorita: Národnosť môže určiť autor.
- Author_ID → Národná autorita: Národnosť môže byť určená z Author_ID prostredníctvom atribútu Author . Stále máme prechodnú závislosť.
Aby sme normalizovali tieto údaje, musíme pridať tretiu tabuľku:
KRAJINA
Country_ID | Krajina |
---|---|
Coun_001 | Spojené štáty |
Coun_002 | Kanada |
Authors
Author_ID | autor | Country_ID |
---|---|---|
Auth_001 | Karta Orson Scott | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Teraz máme tri tabuľky, ktoré používajú cudzie kľúče na prepojenie medzi tabuľkami:
- Cudzí kľúč BOOK tabuľky Autor_ID spája knihu s autorom v tabuľke AUTORI.
- Zahraničný kľúč tabuľky AUTORI Country_ID spája autora s krajinou v tabuľke COUNTRIES.
- Tabuľka KRAJINY nemá žiadny cudzí kľúč, pretože nie je potrebné prepojiť s inou tabuľkou tohto dizajnu.
Prečo sú závislosťami na tranzitivite zlý návrh databázy
Aká je hodnota vyhnúť sa tranzitívnym závislostiam, aby sa zabezpečilo 3NF? Pozrime sa na prvú tabuľku a pozrite sa na jej problémy:
Authors
Author_ID | autor | kniha | Author_Nationality |
---|---|---|---|
Auth_001 | Karta Orson Scott | Enderova hra | Spojené štáty |
Auth_001 | Karta Orson Scott | Deti mysle | Spojené štáty |
Auth_002 | Margaret Atwood | Príbeh dievčaťa | Kanada |
Tento druh dizajnu môže prispieť k anomáliám a nezrovnalostiam v údajoch, napríklad:
- Ak ste odstránili dve knihy "Deti z mysle" a "Enderova hra", vymažte autorku "Orson Scott Card" a jeho národnosť úplne z databázy.
- Do databázy nemôžete pridať nového autora, iba ak pridáte knihu; čo keď je autor ešte nepublikovaný alebo nepoznáte názov knihy, ktorú vydala?
- Ak "Orson Scott Card" zmenil svoje občianstvo, museli by ste to zmeniť vo všetkých záznamoch, v ktorých sa objaví. Mať viac záznamov s tým istým autorom môže viesť k nepresným údajom: Čo ak osoba, ktorá zadá údaje, si neuvedomuje, že má pre ne viacero záznamov a mení údaje iba v jednom záznamu?
- Nemôžete odstrániť knihu ako "Príbeh dievčaťa" bez úplného odstránenia autora.
To sú len niektoré dôvody, prečo normalizácia a vyhýbanie sa tranzitívnym závislostiam chránia dáta a zabezpečujú konzistentnosť.