Izbjegavajte prijelazne zavisnosti kako biste osigurali normalizaciju
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, atribut Knjiga određuje atribut Autora . Ako znate naziv knjige, možete saznati ime autora. Međutim, Autor ne određuje knjigu 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 → AutorNacionalnost : Isto tako, atribut autora određuje Author_Nationality , ali ne i obrnuto; samo zato što znamo da nacionalnost ne znači da možemo odrediti autora.
Ali ova tablica uvodi tranzitivnu ovisnost:
- Knjiga → AutorNacionalnost: Ako znamo naziv knjige, možemo odrediti državljanstvo putem autorskog stupca.
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:
KNJIGA tablica :
- Book_ID → Knjiga: Knjiga ovisi o Book_ID-u .
- U ovoj tablici nema drugih ovisnosti, stoga smo u redu. Imajte na umu da strani ključ Autor_ID povezuje ovu tablicu sa tablicom AUTORSKI preko primarne ključne riječi Autor_ID . Stvorili smo vezu kako bismo izbjegli tranzitivnu ovisnost, ključni dizajn relacijskih baza podataka.
Tablica autora :
- Author_ID → Autor: Autor ovisi o autoru_ID .
- Autor → AutorNacionalnost: Državljanstvo može odrediti autor.
- Author_ID → Author_Nationality: Državljanstvo se može odrediti od Author_ID-a preko atributa Author . 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:
- Inozemni ključ knjige KNJIGA Autor_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.