Prehodna odvisnost v bazi podatkov je posredna povezava med vrednostmi v isti tabeli, ki povzroča funkcionalno odvisnost. Za doseganje normalizacijskega standarda tretje normalne oblike (3NF) morate odstraniti prehodno odvisnost.
Tranzitna odvisnost po svoji naravi zahteva tri ali več atributov (ali stolpce baze podatkov), ki imajo funkcionalno odvisnost med njimi, kar pomeni, da se stolpec A v tabeli opira na stolpec B skozi vmesni stolpec C.
Poglejmo, kako bi to lahko delovalo.
Primer tranzitivne odvisnosti
AVTORJI
Author_ID | Avtor | Knjiga | Avtor_Nationality |
---|---|---|---|
Auth_001 | Orson Scott kartica | Enderova igra | Združene države |
Auth_001 | Orson Scott kartica | Enderova igra | Združene države |
Auth_002 | Margaret Atwood | Osebna zgodba | Kanada |
V zgornjem primeru AUTORI:
- Knjiga → Avtor : Tukaj je Knjiga atribut določa Avtor atribut. Če poznate ime knjige, se lahko naučite imena avtorja. Vendar, Avtor ne določa Knjiga , ker avtor lahko napiše več knjig. Na primer, samo zato, ker poznavamo avtorjevo ime Orson Scott Card, še vedno ne poznamo imena knjige.
- Avtor → Avtor_Nationality : Prav tako, Avtor atribut določa Avtor_Nationality , vendar ne obratno; samo zato, ker vemo, da državljanstvo ne pomeni, da lahko avtor določimo.
Toda ta tabela uvaja prehodno odvisnost:
- Knjiga → Avtor_Nationality: Če poznamo ime knjige, lahko določimo državljanstvo prek stolpca Avtor.
Izogibanje prehodnim odvisnostim
Da zagotovimo tretjo običajno obliko, odstranimo prehodno odvisnost.
Začnemo z odstranitvijo stolpca »Knjiga« iz tabele »Avtorji« in z izdelavo ločene knjižne tabele:
KNJIGE
Book_ID | Knjiga | Author_ID |
---|---|---|
Book_001 | Enderova igra | Auth_001 |
Book_001 | Otroci um | Auth_001 |
Book_002 | Osebna zgodba | Auth_002 |
AVTORJI
Author_ID | Avtor | Avtor_Nationality |
---|---|---|
Auth_001 | Orson Scott kartica | Združene države |
Auth_002 | Margaret Atwood | Kanada |
Ali je to popravilo? Oglejmo si zdaj naše odvisnosti:
BOOKS tabela:
- Book_ID → Knjiga: The Knjiga odvisno od Book_ID .
- Nobene druge odvisnosti v tej tabeli ne obstajajo, zato smo v redu. Upoštevajte, da je tuji ključ Author_ID povezuje to tabelo s tabelo AUTHORS s svojim primarnim ključem Author_ID . Ustvarili smo odnos, da bi se izognili prehodni odvisnosti, ključni zasnovi relacijskih podatkovnih baz.
Tabela AUTHORS:
- Author_ID → Avtor: The Avtor odvisno od Author_ID .
- Avtor → Avtor_Nationality: Državljanstvo lahko določi avtor.
- Author_ID → Avtor_Nationality: Državljanstvo se lahko določi iz Author_ID skozi Avtor atribut. Še vedno imamo prehodno odvisnost.
Za normalizacijo teh podatkov moramo dodati tretjo tabelo:
DRŽAVE
Country_ID | Država |
---|---|
Coun_001 | Združene države |
Coun_002 | Kanada |
AVTORJI
Author_ID | Avtor | Country_ID |
---|---|---|
Auth_001 | Orson Scott kartica | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Zdaj imamo tri tabele, ki uporabljajo tuje ključe za povezavo med tabelami:
- Tuji ključ tabele je tuji Author_ID povezuje knjigo z avtorjem v tabeli AUTHORS.
- Tuji ključ tabele AUTHORS Country_ID povezuje avtorja z državo v tabeli COUNTRIES.
- Tabela COUNTRIES nima nobenega tujega ključa, ker nima potrebe po povezavi z drugo tabelo v tem načrtu.
Zakaj so tranzitivne odvisnosti slaba oblika baze podatkov
Kakšna je vrednost izogibanja prehodnim odvisnostim, da bi zagotovili 3NF? Poglejmo si svojo prvo mizo in si oglejte vprašanja, ki jih ustvarja:
AVTORJI
Author_ID | Avtor | Knjiga | Avtor_Nationality |
---|---|---|---|
Auth_001 | Orson Scott kartica | Enderova igra | Združene države |
Auth_001 | Orson Scott kartica | Otroci um | Združene države |
Auth_002 | Margaret Atwood | Osebna zgodba | Kanada |
Ta oblika lahko prispeva k nepravilnostim in neskladnostim podatkov, na primer:
- Če ste izbrisali dve knjigi "Otroci duha" in "Enderjeva igra", bi izbrisali avtorja "Orson Scott Card" in njegovo državljanstvo iz baze podatkov.
- V zbirko podatkov ne morete dodati novega avtorja, razen če dodate knjigo; kaj, če je avtor še neobjavljen ali pa ne poznate imena knjige, ki jo je ustvarila?
- Če je "Orson Scott Card" spremenil državljanstvo, ga boste morali spremeniti v vse zapise, v katerih se prikaže. Če ima več zapisov z istim avtorjem, lahko privede do netočnih podatkov: kaj, če oseba, ki vnese podatke, ne zaveda, da za njim obstaja več zapisov in spremeni podatke v samo en zapis?
- Ne morete izbrisati knjige, kot je "The Handmaid's Tale", ne da bi v celoti odstranili avtorja.
To so samo nekateri razlogi, zakaj normalizacija in izogibanje prehodnim odvisnostim varujejo podatke in zagotavljajo doslednost.