Skip to main content

Transitieve afhankelijkheid in een database

Computational Linguistics, by Lucas Freitas (Juni- 2026)

Computational Linguistics, by Lucas Freitas (Juni- 2026)
Anonim

Een transitieve afhankelijkheid in een database is een indirecte relatie tussen waarden in dezelfde tabel die een functionele afhankelijkheid veroorzaakt. Om de normalisatienorm van Third Normal Form (3NF) te bereiken, moet u elke transitieve afhankelijkheid elimineren.

Door zijn aard vereist een transitieve afhankelijkheid drie of meer attributen (of databasekolommen) die een functionele afhankelijkheid daartussen hebben, wat betekent dat kolom A in een tabel op kolom B vertrouwt via een tussenliggende kolom C.

Laten we kijken hoe dit zou kunnen werken.

Voorbeeld van transitieve afhankelijkheid

AUTEURS

Author_IDSchrijverBoekAuthor_Nationality
Auth_001Orson Scott CardEnder's spelVerenigde Staten
Auth_001Orson Scott CardEnder's spelVerenigde Staten
Auth_002Margaret AtwoodThe Handmaid's TaleCanada

In het bovenstaande exemplaar van AUTHORS:

  • Boek → Schrijver : Hier de Boek attribuut bepaalt de Schrijver attribuut. Als u de naam van het boek kent, kunt u de naam van de auteur te weten komen. Echter, Schrijver bepaalt niet Boek , omdat een auteur meerdere boeken kan schrijven. Alleen omdat we de naam Orson Scott Card kennen, weten we de naam van het boek nog steeds niet.
  • Schrijver → Author_Nationality : Evenzo, de Schrijver attribuut bepaalt de Author_Nationality , maar niet andersom; alleen omdat we weten dat de nationaliteit niet betekent dat we de auteur kunnen bepalen.

Maar deze tabel introduceert een transitieve afhankelijkheid:

  • Boek → Author_Nationality: Als we de naam van het boek kennen, kunnen we de nationaliteit bepalen via de kolom Auteur.

Transitieve afhankelijkheden vermijden

Laten we de transitieve afhankelijkheid verwijderen om het Third Normal Form te garanderen.

We kunnen beginnen door de kolom Boek uit de tabel Auteurs te verwijderen en een afzonderlijke tabel met boeken te maken:

BOEKEN

Book_IDBoekAuthor_ID
Book_001Ender's spelAuth_001
Book_001Children of the MindAuth_001
Book_002The Handmaid's TaleAuth_002

AUTEURS

Author_IDSchrijverAuthor_Nationality
Auth_001Orson Scott CardVerenigde Staten
Auth_002Margaret AtwoodCanada

Heeft dit dit opgelost? Laten we onze afhankelijkheden nu bekijken:

BOEKEN tabel:

  • Book_ID → Boek: De Boek hangt af van de Book_ID .
  • Er zijn geen andere afhankelijkheden in deze tabel, dus we zijn in orde. Merk op dat de buitenlandse sleutel Author_ID koppelt deze tabel aan de AUTHORS-tabel via de primaire sleutel Author_ID . We hebben een relatie gecreëerd om een ​​transitieve afhankelijkheid te voorkomen, een sleutelontwerp van relationele databases.

AUTEURS tabel:

  • Author_ID → Schrijver: De Schrijver hangt af van de Author_ID .
  • Schrijver → Author_Nationality: De nationaliteit kan door de auteur worden bepaald.
  • Author_ID → Author_Nationality: De nationaliteit kan worden bepaald aan de hand van de Author_ID door het Schrijver attribuut. We hebben nog steeds een transitieve afhankelijkheid.

We moeten een derde tabel toevoegen om deze gegevens te normaliseren:

LANDEN

Country_IDland
Coun_001Verenigde Staten
Coun_002Canada

AUTEURS

Author_IDSchrijverCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

Nu hebben we drie tabellen, gebruik makend van buitenlandse sleutels om te linken tussen de tabellen:

  • De externe sleutel van de BOOK-tabel Author_ID koppelt een boek aan een auteur in de AUTHORS-tabel.
  • De externe sleutel van de AUTHORS-tabel Country_ID linkt een auteur aan een land in de tabel LANDEN.
  • De tabel LANDEN heeft geen externe sleutel, omdat het niet nodig is om in dit ontwerp naar een andere tabel te linken.

Waarom transitieve afhankelijkheden slecht databaseontwerp zijn

Wat is de waarde van het vermijden van transitieve afhankelijkheden om te zorgen voor 3NF? Laten we onze eerste tabel opnieuw bekijken en de problemen bekijken die worden gemaakt:

AUTEURS

Author_IDSchrijverBoekAuthor_Nationality
Auth_001Orson Scott CardEnder's spelVerenigde Staten
Auth_001Orson Scott CardChildren of the MindVerenigde Staten
Auth_002Margaret AtwoodThe Handmaid's TaleCanada

Dit soort ontwerp kan bijdragen aan gegevensanomalieën en inconsistenties, bijvoorbeeld:

  • Als je de twee boeken "Children of the Mind" en "Ender's Game" hebt verwijderd, zou je de auteur "Orson Scott Card" en zijn nationaliteit volledig uit de database verwijderen.
  • U kunt geen nieuwe auteur aan de database toevoegen, tenzij u ook een boek toevoegt; wat als de auteur nog niet is gepubliceerd of u de naam niet weet van een boek dat zij heeft geschreven?
  • Als 'Orson Scott Card' zijn burgerschap heeft gewijzigd, moet u dit wijzigen in alle records waarin hij wordt weergegeven. Het hebben van meerdere records met dezelfde auteur kan resulteren in onnauwkeurige gegevens: wat als de persoon die gegevens invoert zich niet realiseert dat er meerdere records voor hem zijn en de gegevens in slechts één record wijzigt?
  • Je kunt een boek als "The Handmaid's Tale" niet verwijderen zonder ook de auteur volledig te verwijderen.

Dit zijn slechts enkele redenen waarom normalisatie en het vermijden van transitieve afhankelijkheden, gegevens beschermen en zorgen voor consistentie.