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:
- kniha → autor : Tu, kniha atribút určuje autor atribútov. Ak poznáte názov knihy, môžete sa dozvedieť meno autora. Avšak, autor neurčuje kniha , 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 → Author_Nationality : Podobne aj autor atribút určuje Author_Nationality , ale nie naopak; 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 → Author_Nationality: Ak poznáme názov knihy, môžeme určiť národnosť 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 → kniha: kniha závisí od Book_ID .
- Žiadne iné závislosti v tejto tabuľke neexistujú, takže sme v poriadku. Všimnite si, že cudzí kľúč Author_ID prepá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ľky AUTORS:
- Author_ID → Autor: autor závisí od Author_ID .
- autor → Author_Nationality: Národnosť môže určiť autor.
- Author_ID → Author_Nationality: Štátnu príslušnosť možno určiť z Author_ID cez autor atribútov. 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:
- Zahraničný kľúč tabuľky BOOK Author_ID prepája knihu s autorom v tabuľke AUTORI.
- Cudzí kľúč tabuľky AUTORI Country_ID prepá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ť.