Mikä on transitiivinen riippuvuus tietokannassa
Transitiivinen riippuvuus tietokannassa on epäsuora suhde saman taulukon arvojen välillä, joka aiheuttaa a toiminnallinen riippuvuus. Saavuttaakseen Kolmannen normaalimuodon (3NF) normalisointistandardi, sinun on poistettava kaikki transitiivinen riippuvuus.
Luonteeltaan transitiivinen riippuvuus vaatii kolme tai useampia attribuutteja (tai tietokantararakkeet), joiden välillä on toiminnallinen riippuvuus, mikä tarkoittaa, että taulukon sarake A perustuu sarakkeeseen B välisarakkeen C kautta. Katsotaan kuinka tämä voi 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 myös kirjailijan nimen. Kuitenkin, Tekijä ei määrää Kirja, koska kirjailija voi kirjoittaa useita kirjoja. Esimerkiksi vain siksi, että tiedämme kirjoittajan nimen
- Tekijä → Tekijä_kansallisuus: Samoin Tekijä attribuutti määrittää Tekijä_kansallisuus, mutta ei päinvastoin – se, että tiedämme kirjoittajan kansallisuuden, ei tarkoita, että voimme määrittää kirjoittajan.
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
Kolmannen normaalin muodon varmistamiseksi poistetaan transitiivinen riippuvuus.
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? Tutkitaanpa meidän riippuvuuksia nyt:
KIRJAT pöytä:
- Kirja_ID → Kirja: 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 sen ensisijaisen avaimen kautta, Tekijän_ID. Olemme luoneet suhteen välttääksemme transitiivisen riippuvuuden, joka on keskeinen suunnittelu relaatiotietokannat.
TEKIJÄT-taulukko:
- Tekijätunnus → Tekijä: Tekijä riippuu Tekijän_ID.
- Tekijä → Tekijä_kansallisuus:Tekijä voi määrittää kansallisuuden.
- Tekijän_tunnus → Tekijän_kansallisuus: Kansallisuus 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:
MAAT
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 käytössämme kolme pöytää vieraita avaimia linkittääksesi taulukoiden välillä:
- KIRJA-taulukon vierasavain, Tekijän_ID, linkittää kirjan kirjoittajaan AUTHORS-taulukossa.
- AUTHORS-taulukon viiteavain, Country_ID, linkittää kirjoittajan COUNTRIES-taulukon maahan.
- COUNTRIES-taulukossa ei ole vierasavainta, koska sen ei tarvitse linkittää toiseen taulukkoon tässä mallissa.
Miksi transitiiviset riippuvuudet ovat huonoja tietokantasuunnittelua
Mitä hyötyä on välttää transitiivisia riippuvuuksia 3NF: n varmistamiseksi? Tarkastellaanpa ensimmäistä taulukkoamme uudelleen 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 kirjailijan "Orson Scott Card" ja hänen kansalaisuutensa kokonaan tietokannasta.
- Et voi lisätä uutta kirjailijaa tietokantaan, ellet lisää myös kirjaa. Entä jos kirjailija on vielä julkaisematon tai et tiedä hänen kirjoittaman kirjan nimeä?
- Jos "Orson Scott Card" vaihtaisi kansalaisuutensa, 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 tietojen syöttäjä ei ymmärrä, että jollekin on useita tietueita, ja muuttaa tietoja vain yhdessä tietueessa?
- Et voi poistaa kirjaa esim Neitsyttaren tarina poistamatta myös kirjoittajaa kokonaan.
Usein Kysytyt Kysymykset
- Millaisia riippuvuuksia tietokannan hallintajärjestelmässä on? Siellä on neljä erilaista tietokantariippuvuutta: triviaaliset toiminnalliset riippuvuudet, täydelliset toiminnalliset 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.