Skip to main content

Transitirajuća ovisnost u bazi podataka

The Tale of Two Thrones - The Archangel and Atlantis w Ali Siadatan - NYSTV (Travanj 2025)

The Tale of Two Thrones - The Archangel and Atlantis w Ali Siadatan - NYSTV (Travanj 2025)
Anonim

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_IDAutorKnjigaAuthor_Nationality
Auth_001Orson Scott CardEnderova igraUjedinjene države
Auth_001Orson Scott CardEnderova igraUjedinjene države
Auth_002Margaret AtwoodPrijateljica pričaKanada

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_IDKnjigaAUTHOR_ID
Book_001Enderova igraAuth_001
Book_001Djeca umaAuth_001
Book_002Prijateljica pričaAuth_002

AUTORI

AUTHOR_IDAutorAuthor_Nationality
Auth_001Orson Scott CardUjedinjene države
Auth_002Margaret AtwoodKanada

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_IDZemlja
Coun_001Ujedinjene države
Coun_002Kanada

AUTORI

AUTHOR_IDAutorCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_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_IDAutorKnjigaAuthor_Nationality
Auth_001Orson Scott CardEnderova igraUjedinjene države
Auth_001Orson Scott CardDjeca umaUjedinjene države
Auth_002Margaret AtwoodPrijateljica pričaKanada

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.