Programmer 57235e293df78c5640e960a7 scaled

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.

Por Markus