Skip to main content

Dependenta tranzitiva intr-o baza de date

Ce este DEPENDENTA? (Aprilie 2025)

Ce este DEPENDENTA? (Aprilie 2025)
Anonim

O dependență tranzitorie într-o bază de date este o relație indirectă între valorile din aceeași tabelă care determină o dependență funcțională. Pentru a atinge standardul de normalizare a Formei 3 Normale (3NF), trebuie să eliminați orice dependență tranzitantă.

Prin natura sa, dependența tranzitiva necesită trei sau mai multe atribute (sau coloane de bază de date) care au o dependență funcțională între ele, ceea ce înseamnă că coloana A într-un tabel se bazează pe Coloana B printr-o coloană intermediară C.

Să vedem cum ar putea funcționa acest lucru.

Exemplu de dependență tranzitorie

AUTORI

Author_IDAutorCarteAuthor_Nationality
Auth_001Cardul Orson ScottJocul lui EnderStatele Unite
Auth_001Cardul Orson ScottJocul lui EnderStatele Unite
Auth_002Margaret AtwoodPovestea roabeiCanada

În exemplul AUTORI de mai sus:

  • Carte → Autor : Aici Carte atributul determină Autor atribut. Dacă știți numele cărții, puteți afla numele autorului. In orice caz, Autor nu determină Carte , deoarece un autor poate scrie mai multe cărți. De exemplu, doar pentru că știm numele autorului Orson Scott Card, încă nu știm numele cărții.
  • Autor → Author_Nationality : De asemenea, Autor atributul determină Author_Nationality , dar nu invers; doar pentru că știm naționalitatea nu înseamnă că putem determina autorul.

Dar acest tabel introduce o dependență tranzitivă:

  • Carte → Author_Nationality: Dacă știm numele cărții, putem determina naționalitatea prin coloana Autorul.

Evitarea dependențelor tranzitorii

Pentru a asigura a treia formă normală, să eliminăm dependența tranzitantă.

Putem începe prin eliminarea coloanei Cărți din tabelul Autori și crearea unui tabel separat Cărți:

CĂRȚI

Book_IDCarteAuthor_ID
Book_001Jocul lui EnderAuth_001
Book_001Copiii mințiiAuth_001
Book_002Povestea roabeiAuth_002

AUTORI

Author_IDAutorAuthor_Nationality
Auth_001Cardul Orson ScottStatele Unite
Auth_002Margaret AtwoodCanada

A rezolvat asta? Să examinăm acum dependențele noastre:

Tabele CARTE:

  • Book_ID → Carte: Carte depinde de Book_ID .
  • Nu există alte dependențe în acest tabel, deci suntem bine. Rețineți că cheia externă Author_ID leagă acest tabel la tabela AUTORI prin cheia primară Author_ID . Am creat o relație pentru a evita dependența tranzitiva, un design cheie al bazelor de date relaționale.

Tabelul AUTORI:

  • Author_ID → Autor: Autor depinde de Author_ID .
  • Autor → Author_Nationality: Naționalitatea poate fi determinată de autor.
  • Author_ID → Author_Nationality: Naționalitatea poate fi determinată de la Author_ID prin Autor atribut. Mai avem o dependență tranzitantă.

Trebuie să adăugăm un al treilea tabel pentru a normaliza aceste date:

ȚĂRI

country_idȚară
Coun_001Statele Unite
Coun_002Canada

AUTORI

Author_IDAutorcountry_id
Auth_001Cardul Orson ScottCoun_001
Auth_002Margaret AtwoodCoun_002

Acum avem trei mese, folosind cheile străine pentru a face legătura între mese:

  • Cheia străină a tabelului BOOK Author_ID leagă o carte unui autor în tabela AUTORI.
  • Cheia externă a tabelului AUTORILOR country_id leagă autorul unei țări în tabela COUNTRIES.
  • Tabelul ȚĂRI nu are cheie străină, deoarece nu are nevoie să se lege la alt tabel în acest design.

De ce dependențele tranzitorii sunt baze de date greșite

Care este valoarea evitării dependențelor tranzitorii pentru a ajuta la asigurarea 3NF? Să luăm în considerare primul nostru tabel și să vedem problemele pe care le creează:

AUTORI

Author_IDAutorCarteAuthor_Nationality
Auth_001Cardul Orson ScottJocul lui EnderStatele Unite
Auth_001Cardul Orson ScottCopiii mințiiStatele Unite
Auth_002Margaret AtwoodPovestea roabeiCanada

Acest tip de design poate contribui la anomalii și inconsecvențe de date, de exemplu:

  • Dacă ați șters cele două cărți "Copiii minții" și "Jocul lui Ender", ați șterge autorul "Orson Scott Card" și naționalitatea sa complet din baza de date.
  • Nu puteți adăuga un nou autor în baza de date decât dacă adăugați și o carte; ce dacă autorul este încă nepublicat sau nu știți numele unei cărți pe care a scris-o?
  • Dacă "Orson Scott Card" și-a schimbat cetățenia, va trebui să o schimbați în toate înregistrările în care apare. Înregistrarea mai multor înregistrări cu același autor poate duce la date incorecte: Ce se întâmplă dacă persoana care introduce datele nu realizează că există mai multe înregistrări pentru el și modifică datele într-o singură înregistrare?
  • Nu puteți șterge o carte precum "Povestea slujitorului" fără a șterge complet autorul.

Acestea sunt doar câteva motive pentru care normalizarea și evitarea dependențelor tranzitorii protejează datele și asigură coerența.