Een transitieve afhankelijkheid in een database is een indirecte relatie tussen waarden in dezelfde tabel die een functionele afhankelijkheid veroorzaakt. Om de normalisatiestandaard van de derde normaalvorm (3NF) te bereiken, moet u elke transitieve afhankelijkheid elimineren. Door zijn aard vereist een transitieve afhankelijkheid drie of meer attributen (of databasekolommen) met een functionele afhankelijkheid ertussen, wat betekent dat kolom A in een tabel afhankelijk is van kolom B via een tussenliggende kolom C. Laten we eens kijken hoe dit zou kunnen werken.
Voorbeeld van transitieve afhankelijkheid
AUTEURS
Auteur_ID | Schrijver | Boek | Auteur_Nationaliteit |
---|---|---|---|
Auth_001 | Orson Scott-kaart | Ender’s spel | Verenigde Staten |
Auth_001 | Orson Scott-kaart | Kinderen van de geest | Verenigde Staten |
Auth_002 | Margaret Atwood | Het verhaal van de dienstmaagd | Canada |
In het AUTEURS-voorbeeld hierboven:
- Boek → Auteur: Hier de Boek attribuut bepaalt de Schrijver attribuut. Als u de naam van het boek weet, kunt u de naam van de auteur leren. Echter, Schrijver bepaalt niet Boek, omdat een auteur meerdere boeken kan schrijven. Bijvoorbeeld, alleen omdat we weten dat de naam van de auteur is Orson Scott-kaart, we weten de naam van het boek nog steeds niet.
- Auteur → Auteur_Nationaliteit: Zo ook de Schrijver attribuut bepaalt de Auteur_Nationaliteit, maar niet andersom – alleen omdat we de nationaliteit van de auteur kennen, betekent niet dat we de auteur kunnen bepalen.
Maar deze tabel introduceert een transitieve afhankelijkheid:
- Boek →Auteur_Nationaliteit: Als we de boeknaam weten, kunnen we de nationaliteit van de auteur bepalen via de kolom Auteur.
Transitieve afhankelijkheden vermijden
Laten we de transitieve afhankelijkheid verwijderen om de derde normale vorm te garanderen. We kunnen beginnen door de kolom Boek uit de tabel Auteurs te verwijderen en een aparte tabel Boeken te maken:
BOEKEN
Boek_ID | Boek | Auteur_ID |
---|---|---|
Boek_001 | Ender’s spel | Auth_001 |
Boek_001 | Kinderen van de geest | Auth_001 |
Boek_002 | Het verhaal van de dienstmaagd | Auth_002 |
AUTEURS
Auteur_ID | Schrijver | Auteur_Nationaliteit |
---|---|---|
Auth_001 | Orson Scott-kaart | Verenigde Staten |
Auth_002 | Margaret Atwood | Canada |
Heeft dit het verholpen? Laten we nu onze afhankelijkheden onderzoeken:
BOEKEN tafel:
- Boek_ID → Boek: De Boek hangt af van de Boek_ID.
- Er zijn geen andere afhankelijkheden in deze tabel, dus we zijn in orde. Merk op dat de externe sleutel, Auteur_ID, koppelt deze tabel aan de AUTHORS-tabel via de primaire sleutel, Auteur_ID. We hebben een relatie gecreëerd om een transitieve afhankelijkheid te vermijden, een belangrijk ontwerp van relationele databases.
AUTEURS tabel:
- Auteur_ID → Auteur: De Schrijver hangt af van de Auteur_ID.
- Auteur → Auteur_Nationaliteit: De nationaliteit kan door de auteur worden bepaald.
- Auteur_ID → Auteur_Nationaliteit: De nationaliteit kan worden bepaald aan de hand van de Auteur_ID door het Schrijver attribuut. We hebben nog steeds een transitieve afhankelijkheid.
We moeten een derde tabel toevoegen om deze gegevens te normaliseren:
LANDEN
Land_ID | land |
---|---|
Coun_001 | Verenigde Staten |
Coun_002 | Canada |
AUTEURS
Auteur_ID | Schrijver | Land_ID |
---|---|---|
Auth_001 | Orson Scott-kaart | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Nu hebben we drie tabellen, die gebruikmaken van externe sleutels om de tabellen te koppelen:
- De refererende sleutel van de BOOK-tabel, Auteur_ID, koppelt een boek aan een auteur in de tabel AUTEURS.
- De refererende sleutel van de AUTHORS-tabel, Land_ID, koppelt een auteur aan een land in de tabel LANDEN.
- De tabel COUNTRIES heeft geen externe sleutel omdat er in dit ontwerp geen koppeling naar een andere tabel nodig is.
Waarom transitieve afhankelijkheden een slecht databaseontwerp zijn
Wat is de waarde van het vermijden van transitieve afhankelijkheden om 3NF te helpen verzekeren? Laten we onze eerste tabel opnieuw bekijken en de problemen bekijken die deze veroorzaakt:
AUTEURS
Auteur_ID | Schrijver | Boek | Auteur_Nationaliteit |
---|---|---|---|
Auth_001 | Orson Scott-kaart | Ender’s spel | Verenigde Staten |
Auth_001 | Orson Scott-kaart | Kinderen van de geest | Verenigde Staten |
Auth_002 | Margaret Atwood | Het verhaal van de dienstmaagd | Canada |
Dit soort ontwerp kan bijdragen aan gegevensafwijkingen en inconsistenties, bijvoorbeeld:
- Als je de twee boeken hebt verwijderd Kinderen van de geest en Ender’s spel, u zou 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 hij heeft geschreven?
- Als “Orson Scott Card” zijn staatsburgerschap heeft gewijzigd, moet u zijn staatsburgerschap wijzigen in alle records waarin hij voorkomt. Het hebben van meerdere records met dezelfde auteur kan leiden tot onnauwkeurige gegevens. Wat als de persoon die gegevens invoert niet beseft dat er meerdere records voor iemand zijn en de gegevens in slechts één record wijzigt?
- U kunt een boek zoals . niet verwijderen Het verhaal van de dienstmaagd zonder ook de auteur volledig te verwijderen.
Veel Gestelde Vragen
- Wat zijn de soorten afhankelijkheden in een databasebeheersysteem? Er zijn vier soorten databaseafhankelijkheden: triviale functionele afhankelijkheden, volledig functionele afhankelijkheden, transitieve afhankelijkheden en meerwaardige afhankelijkheden.
- Hoe verschilt functionele afhankelijkheid van transitieve afhankelijkheid? In databasebeheer is afhankelijkheid een relatie tussen twee of meer attributen (kolommen). Terwijl functionele afhankelijkheid een associatie is tussen twee attributen van dezelfde relatie, treedt transitieve afhankelijkheid op wanneer een indirecte relatie functionele afhankelijkheid veroorzaakt.
Meer van Lifewire
-
Wat is een databaserelatie?
-
Volledige functionele afhankelijkheid bij databasenormalisatie
-
Een database in de derde normale vorm (3NF) plaatsen
-
Een databasekenmerk definieert de eigenschappen van een tabel
-
Een database in de eerste normale vorm zetten
-
Woordenlijst van algemene databasetermen
-
Wat zijn database-afhankelijkheden?
-
Meerwaardige afhankelijkheid in databaseontwerp
-
Basisprincipes van databasenormalisatie
-
Een databasedomein definiëren
-
Wat is de Boyce-Codd-normale vorm (BCNF)?
-
Wat is een databaseschema?
-
Een-op-veel-relaties in een database
-
Triviale functionele afhankelijkheid begrijpen
-
Determinanten en hun rol in een database
-
Nook-app voor Android
Uw privacyrechten
Lifewire en onze externe partners gebruiken cookies en verwerken persoonlijke gegevens zoals unieke identificatiegegevens op basis van uw toestemming om informatie op een apparaat op te slaan en/of te openen, gepersonaliseerde advertenties weer te geven en voor inhoudsmeting, doelgroepinzicht en productontwikkeling. Klik hieronder om uw toestemmingskeuzes voor Lifewire.com te wijzigen of in te trekken, inclusief uw recht om bezwaar te maken wanneer een legitiem belang wordt gebruikt. U kunt uw instellingen op elk moment bijwerken via de link “EU-privacy” onderaan elke pagina. Deze keuzes worden wereldwijd aan onze partners gesignaleerd en hebben geen invloed op de browsegegevens. Lijst met partners (leveranciers)
Wij en onze partners verwerken gegevens om:
Scan actief apparaatkenmerken voor identificatie. Gebruik nauwkeurige geolocatiegegevens. Informatie op een apparaat opslaan en/of openen. Selecteer gepersonaliseerde inhoud. Maak een gepersonaliseerd inhoudsprofiel. Meet advertentieprestaties. Selecteer basisadvertenties. Maak een gepersonaliseerd advertentieprofiel. Selecteer gepersonaliseerde advertenties. Pas marktonderzoek toe om doelgroepinzichten te genereren. Inhoudsprestaties meten. Ontwikkelen en verbeteren van producten. Lijst met partners (leveranciers)