Preprečite prehodne odvisnosti, da bi zagotovili normalizacijo
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:
- Book → Avtor : Here, atribut Book določa atribut Avtorja . Če poznate ime knjige, se lahko naučite imena avtorja. Avtor pa ne določi knjige , ker lahko avtor 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 avtorski atribut določa avtorsko ime , vendar ne obratno; samo zato, ker vemo, da državljanstvo ne pomeni, da lahko avtor določimo.
Toda ta tabela uvaja prehodno odvisnost:
- Book → Author_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:
Tabela KNJIGOV :
- Book_ID → Knjiga: knjiga je odvisna od Book_ID .
- Nobene druge odvisnosti v tej tabeli ne obstajajo, zato smo v redu. Upoštevajte, da 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: Avtor je odvisen od Author_ID .
- Avtor → Avtor_Nationality: Državljanstvo lahko določi avtor.
- Author_ID → Author_Nationality: Državljanstvo je mogoče določiti iz avtorja avtorja pod atributom avtorja . Š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:
- Tuj ključ TABELA KNJIGE Author_ID povezuje knjigo z avtorjem v tabeli AUTHORS .
- Tuje ključev tabele AUTHORS Country_ID povezuje avtorja v 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.