Tranzitivna ovisnost u bazi podataka je neizravni odnos između vrijednosti u istoj tablici koja uzrokuje funkcionalnu ovisnost. Da bi se postigao normalizacijski standard trećeg normalnog obrasca (3NF), morate ukloniti svaku tranzitivnu ovisnost.
Prirodno, tranzitna ovisnost zahtijeva tri ili više atributa (ili stupaca baze podataka) koji imaju funkcionalnu ovisnost između njih, što znači da se stupac A u tablici oslanja na stupac B preko međusloja C.
Pogledajmo kako bi to moglo funkcionirati.
Primjer transitibilne ovisnosti
AUTORI
AUTHOR_ID | Autor | Knjiga | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderova igra | Ujedinjene države |
Auth_001 | Orson Scott Card | Enderova igra | Ujedinjene države |
Auth_002 | Margaret Atwood | Prijateljica priča | Kanada |
U gornjem primjeru autora:
- Knjiga → Autor : Ovdje, Knjiga atribut određuje Autor atribut. Ako znate naziv knjige, možete saznati ime autora. Međutim, Autor ne određuje Knjiga , jer autor može napisati više knjiga. Na primjer, samo zato što poznajemo autora imena Orson Scott Card, još uvijek ne znamo ime knjige.
- Autor → Author_Nationality : Isto tako, Autor atribut određuje Author_Nationality , ali ne obrnuto; samo zato što znamo da nacionalnost ne znači da možemo odrediti autora.
Ali ova tablica uvodi tranzitivnu ovisnost:
- Knjiga → Author_Nationality: Ako znamo naziv knjige, možemo odrediti državljanstvo putem stupca Autor.
Izbjegavanje transfernih ovisnosti
Da bismo osigurali treći normalan obrazac, uklonimo tranzitivnu ovisnost.
Možemo početi uklanjanjem stupca Knjiga iz tablice Autori i izradom zasebne tablice knjiga:
KNJIGE
Book_ID | Knjiga | AUTHOR_ID |
---|---|---|
Book_001 | Enderova igra | Auth_001 |
Book_001 | Djeca uma | Auth_001 |
Book_002 | Prijateljica priča | Auth_002 |
AUTORI
AUTHOR_ID | Autor | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Ujedinjene države |
Auth_002 | Margaret Atwood | Kanada |
Je li to popravio? Pogledajmo sada naše ovisnosti:
KNJIGE tablice:
- Book_ID → Knjiga: Knjiga ovisi o Book_ID .
- U ovoj tablici nema drugih ovisnosti, stoga smo u redu. Imajte na umu da je strani ključ AUTHOR_ID povezuje ovu tablicu sa tablicom AUTORA putem primarnog ključa AUTHOR_ID , Stvorili smo vezu kako bismo izbjegli tranzitivnu ovisnost, ključni dizajn relacijskih baza podataka.
Tablici AUTORA:
- AUTHOR_ID → Autor: Autor ovisi o AUTHOR_ID .
- Autor → Author_Nationality: Državljanstvo može odrediti autor.
- AUTHOR_ID → Author_Nationality: Državljanstvo se može odrediti iz AUTHOR_ID kroz Autor atribut. I dalje imamo tranzitivnu ovisnost.
Treba dodati treću tablicu za normalizaciju ovih podataka:
ZEMLJE
Country_ID | Zemlja |
---|---|
Coun_001 | Ujedinjene države |
Coun_002 | Kanada |
AUTORI
AUTHOR_ID | Autor | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Sada imamo tri tablice, pomoću stranih ključeva za povezivanje između tablica:
- Strani ključ knjige KNJIGA AUTHOR_ID povezuje knjigu s autorom u tablici AUTHORS.
- Strani ključ AUTHORS tablice Country_ID povezuje autora s nekom zemljom u tablici COUNTRIES.
- Tablica COUNTRIES nema stranog ključa jer nema potrebe povezati se s drugom tablicom u ovom dizajnu.
Zašto su tranzitne ovisnosti loši dizajn podataka
Koja je vrijednost izbjegavanja tranzitnih zavisnosti kako bi se osiguralo 3NF? Ponovno razmotrimo našu prvu tablicu i vidimo probleme koje stvara:
AUTORI
AUTHOR_ID | Autor | Knjiga | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderova igra | Ujedinjene države |
Auth_001 | Orson Scott Card | Djeca uma | Ujedinjene države |
Auth_002 | Margaret Atwood | Prijateljica priča | Kanada |
Ova vrsta dizajna može pridonijeti anomalijama podataka i nedosljednostima, na primjer:
- Ako ste izbrisali dvije knjige "Djeca uma" i "Enderova igra", izbrisat ćete autor "Orson Scott Card" i njegovu nacionalnost u potpunosti iz baze podataka.
- Ne možete dodati novi autor u bazu podataka osim ako dodate i knjigu; što ako autor još nije objavljen ili ne znate ime knjige koju je napisala?
- Ako je "Orson Scott Card" promijenio državljanstvo, morat ćete ga promijeniti u svim zapisima u kojima se pojavljuje. Imajući višestruke zapise s istim autorom može rezultirati netočnim podacima: što ako osoba koja unosi podatke ne shvati da ima više zapisa za njega i mijenja podatke u samo jednom zapisu?
- Ne možete izbrisati knjigu kao što je "The Handmaid's Tale" bez potpunog brisanja autora.
To su samo neki od razloga zašto normalizacija, i izbjegavanje tranzitivnih zavisnosti, štiti podatke i osigurava dosljednost.