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_ID | Schrijver | Boek | Author_Nationality |
|---|---|---|---|
| Auth_001 | Orson Scott Card | Ender's spel | Verenigde Staten |
| Auth_001 | Orson Scott Card | Ender's spel | Verenigde Staten |
| Auth_002 | Margaret Atwood | The Handmaid's Tale | Canada |
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_ID | Boek | Author_ID |
|---|---|---|
| Book_001 | Ender's spel | Auth_001 |
| Book_001 | Children of the Mind | Auth_001 |
| Book_002 | The Handmaid's Tale | Auth_002 |
AUTEURS
| Author_ID | Schrijver | Author_Nationality |
|---|---|---|
| Auth_001 | Orson Scott Card | Verenigde Staten |
| Auth_002 | Margaret Atwood | Canada |
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_ID | land |
|---|---|
| Coun_001 | Verenigde Staten |
| Coun_002 | Canada |
AUTEURS
| Author_ID | Schrijver | Country_ID |
|---|---|---|
| Auth_001 | Orson Scott Card | Coun_001 |
| Auth_002 | Margaret Atwood | Coun_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_ID | Schrijver | Boek | Author_Nationality |
|---|---|---|---|
| Auth_001 | Orson Scott Card | Ender's spel | Verenigde Staten |
| Auth_001 | Orson Scott Card | Children of the Mind | Verenigde Staten |
| Auth_002 | Margaret Atwood | The Handmaid's Tale | Canada |
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.




