Transitiivinen riippuvuus tietokannassa on epäsuora suhde saman taulukon arvojen välillä, joka aiheuttaa toiminnallisen riippuvuuden. Kolmannen normaalimuodon (3NF) normalisointistandardin saavuttamiseksi sinun on poistettava kaikki transitiivinen riippuvuus. Perinteinen riippuvuus vaatii luonteeltaan kolme tai useampia attribuutteja (tai tietokantasarakkeita), joiden välillä on toiminnallinen riippuvuus, mikä tarkoittaa, että taulukon sarake A riippuu sarakkeesta B välisarakkeen C kautta. Katsotaanpa, miten tämä voisi toimia.
Esimerkki transitiivisesta riippuvuudesta
TEKIJÄT
Tekijän_ID | Tekijä | Kirja | Tekijä_kansallisuus |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderin peli | Yhdysvallat |
Auth_001 | Orson Scott Card | Mielen lapset | Yhdysvallat |
Auth_002 | Margaret Atwood | Neitsyttaren tarina | Kanada |
Yllä olevassa AUTHORS-esimerkissä:
- Kirja → Tekijä: tässä Kirja attribuutti määrittää Tekijä attribuutti. Jos tiedät kirjan nimen, voit oppia kirjailijan nimen. Kuitenkin, Tekijä ei määrää Kirja, koska kirjailija voi kirjoittaa useita kirjoja. Esimerkiksi vain siksi, että tiedämme kirjoittajan nimen Orson Scott Cardemme vieläkään tiedä kirjan nimeä.
- Tekijä → Tekijä_kansallisuus: Niin on Tekijä attribuutti määrittää Tekijä_kansallisuusmutta ei päinvastoin – se, että tiedämme kirjoittajan kansallisuuden, ei tarkoita, että voimme määrittää tekijän.
Mutta tämä taulukko esittelee transitiivisen riippuvuuden:
- Kirja → Tekijä_kansallisuus: Jos tiedämme kirjan nimen, voimme määrittää tekijän kansallisuuden Tekijä-sarakkeen kautta.
Transitiivisten riippuvuuksien välttäminen
Poistetaan transitiivinen riippuvuus kolmannen normaalimuodon takaamiseksi. Voimme aloittaa poistamalla Kirja-sarakkeen Tekijät-taulukosta ja luomalla erillisen Kirjat-taulukon:
KIRJAT
Kirja_ID | Kirja | Tekijän_ID |
---|---|---|
Kirja_001 | Enderin peli | Auth_001 |
Kirja_001 | Mielen lapset | Auth_001 |
Kirja_002 | Neitsyttaren tarina | Auth_002 |
TEKIJÄT
Tekijän_ID | Tekijä | Tekijä_kansallisuus |
---|---|---|
Auth_001 | Orson Scott Card | Yhdysvallat |
Auth_002 | Margaret Atwood | Kanada |
Korjasiko tämä asian? Tarkastellaan nyt riippuvuuksiamme:
VARAA pöytä:
- Kirja_ID → Kirja: The Kirja riippuu Kirja_ID.
- Tässä taulukossa ei ole muita riippuvuuksia, joten olemme kunnossa. Huomaa, että vieras avain, Author_ID, linkittää tämän taulukon AUTHORS-taulukkoon ensisijaisen avaimen kautta, Tekijän_ID. Loimme suhteen välttääksemme transitiivisen riippuvuuden, joka on tärkeä relaatiotietokantasuunnittelu.
AUTHORS taulukko:
- Tekijän_ID → Tekijä: De Tekijä riippuu Tekijän_ID.
- Tekijä → Tekijä_kansallisuus: Tekijä voi määrittää kansallisuuden.
- Tekijän_tunnus → Tekijän_kansallisuus: Kansalaisuus voidaan määrittää Tekijän_ID läpi Tekijä attribuutti. Meillä on edelleen transitiivinen riippuvuus.
Meidän on lisättävä kolmas taulukko näiden tietojen normalisoimiseksi:
LASKEUTUA
Country_ID | Maa |
---|---|
Count_001 | Yhdysvallat |
Count_002 | Kanada |
TEKIJÄT
Tekijän_ID | Tekijä | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Count_001 |
Auth_002 | Margaret Atwood | Count_002 |
Nyt meillä on kolme taulukkoa, jotka linkittävät taulukot vieraiden avaimien avulla:
- KIRJA-taulukon vierasavain, Tekijän_IDlinkittää kirjan kirjailijaan AUTHORS-taulukossa.
- AUTHORS-taulukon vierasavain, Country_IDlinkittää kirjoittajan COUNTRIES-taulukon maahan.
- COUNTRIES-taulukossa ei ole vieraa-avainta, koska se ei vaadi linkittämistä toiseen taulukkoon tässä mallissa.
Miksi transitiiviset riippuvuudet ovat huono tietokantasuunnittelu
Mitä hyötyä on välttää transitiivisia riippuvuuksia 3NF:n varmistamiseksi? Palataan ensimmäiseen taulukkoomme ja katsotaan sen aiheuttamia ongelmia:
TEKIJÄT
Tekijän_ID | Tekijä | Kirja | Tekijä_kansallisuus |
---|---|---|---|
Auth_001 | Orson Scott Card | Enderin peli | Yhdysvallat |
Auth_001 | Orson Scott Card | Mielen lapset | Yhdysvallat |
Auth_002 | Margaret Atwood | Neitsyttaren tarina | Kanada |
Tällainen suunnittelu voi aiheuttaa tietojen poikkeavuuksia ja epäjohdonmukaisuuksia, esimerkiksi:
- Jos poistit kaksi kirjaa Mielen lapset ja Enderin peli, poistaisit kokonaan kirjailijan «Orson Scott Card» ja hänen kansallisuutensa tietokannasta.
- Et voi lisätä uutta kirjailijaa tietokantaan, ellet lisää myös kirjaa. Entä jos kirjailijaa ei ole vielä julkaistu tai et tiedä hänen kirjoittamansa kirjan nimeä?
- Jos «Orson Scott Card» vaihtaisi kansalaisuuttaan, sinun on vaihdettava hänen kansalaisuutensa kaikissa tietueissa, joissa hän esiintyy. Useiden tietueiden käyttäminen samalla tekijällä voi johtaa epätarkkoihin tietoihin. Entä jos tietoja syöttävä henkilö ei ymmärrä, että jollakin on useita tietueita ja muuttaa tietoja vain yhdessä tietueessa?
- Voit ladata kirjan, kuten . Älä poista Neitsyttaren tarina poistamatta myös kirjoittajaa kokonaan.
Usein Kysytyt Kysymykset
- Millaisia riippuvuuksia tietokannan hallintajärjestelmässä on? Tietokantariippuvuuksia on neljää tyyppiä: triviaaliset toiminnalliset riippuvuudet, täysin toimivat riippuvuudet, transitiiviset riippuvuudet ja moniarvoiset riippuvuudet.
- Miten toiminnallinen riippuvuus eroaa transitiivisesta riippuvuudesta? Tietokannan hallinnassa riippuvuus on kahden tai useamman attribuutin (sarakkeen) välinen suhde. Vaikka toiminnallinen riippuvuus on saman suhteen kahden attribuutin välinen yhteys, transitiivinen riippuvuus ilmenee, kun epäsuora suhde aiheuttaa toiminnallisen riippuvuuden.