Skip to main content

Transitívna závislosť v databáze

Anonim

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_IDautorknihaAuthor_Nationality
Auth_001Karta Orson ScottEnderova hraSpojené štáty
Auth_001Karta Orson ScottEnderova hraSpojené štáty
Auth_002Margaret AtwoodPríbeh dievčaťaKanada

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_IDknihaAuthor_ID
Book_001Enderova hraAuth_001
Book_001Deti mysleAuth_001
Book_002Príbeh dievčaťaAuth_002

Authors

Author_IDautorAuthor_Nationality
Auth_001Karta Orson ScottSpojené štáty
Auth_002Margaret AtwoodKanada

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_IDKrajina
Coun_001Spojené štáty
Coun_002Kanada

Authors

Author_IDautorCountry_ID
Auth_001Karta Orson ScottCoun_001
Auth_002Margaret AtwoodCoun_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_IDautorknihaAuthor_Nationality
Auth_001Karta Orson ScottEnderova hraSpojené štáty
Auth_001Karta Orson ScottDeti mysleSpojené štáty
Auth_002Margaret AtwoodPríbeh dievčaťaKanada

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ť.