Vältä siirtymän riippuvuuksia auttamaan normaalin toiminnan varmistamisessa
Transitiivinen riippuvuus tietokannasta on välillinen suhde samassa taulukossa olevien arvojen kanssa, joka aiheuttaa funktionaalisen riippuvuuden . Kolmannen normaalin muodon (3NF) normalisointitason saavuttamiseksi sinun on poistettava kaikki välitön riippuvuus.
Transitiivinen riippuvuus edellyttää luonteensa vuoksi, että kolme tai useampi attribuutti (tai tietokantapylväs) on funktionaalinen riippuvuus niiden välillä, mikä tarkoittaa, että taulukon sarake A perustuu sarakkeeseen B välivaiheen C kautta.
Katsotaanpa, miten tämä voisi toimia.
Transitiivinen riippuvuusesimerkki
TEKIJÄT
Author_ID | kirjailija | Kirja | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Ender's Game | Yhdysvallat |
Auth_001 | Orson Scott Card | Ender's Game | Yhdysvallat |
Auth_002 | Margaret Atwood | Käsikirjan tarina | Kanada |
Edellä olevassa AUTHORS-esimerkissä:
- Kirja → Kirjailija : Tässä Book- attribuutti määrittää Auth attribuutin. Jos tiedät kirjan nimen, voit oppia tekijän nimen. Kirjoittaja ei kuitenkaan määrittele kirjaa , koska tekijä voi kirjoittaa useita kirjoja. Esimerkiksi, koska tiedämme tekijän nimen Orson Scott Card, emme vielä tiedä kirjan nimeä.
- Tekijä → Author_Nationality : Samoin Auth attribuutti määrittää Author_Nationality , mutta ei toisinpäin; vain koska tiedämme, että kansalaisuus ei tarkoita, että voimme määrittää kirjoittajan.
Mutta tässä taulukossa esitetään transitiivinen riippuvuus:
- Kirja → Author_Nationality: Jos tiedämme kirjan nimen, voimme määrittää kansalaisuuden Kirjoittajan sarakkeen kautta.
Välttämättömien riippuvuuksien välttäminen
Varmistamme Kolmannen Normaalin muodon poistamalla transitiivisen riippuvuuden.
Voimme aloittaa poistamalla Kirja-sarakkeen Tekijät-taulukosta ja luomalla erillisen Kirjat-taulukon:
KIRJAT
Book_ID | Kirja | Author_ID |
---|---|---|
Book_001 | Ender's Game | Auth_001 |
Book_001 | Mielen lapset | Auth_001 |
Book_002 | Käsikirjan tarina | Auth_002 |
TEKIJÄT
Author_ID | kirjailija | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Yhdysvallat |
Auth_002 | Margaret Atwood | Kanada |
Korjaa tämä se? Tarkastellaan nyt riippuvuuksiamme:
KIRJAT taulukko :
- Book_ID → Book: Kirja riippuu Book_ID: stä .
- Tässä taulukossa ei ole muita riippuvuuksia, joten olemme kunnossa. Huomaa, että vieraan avaimen Author_ID liittää tämän taulukon AUTHORS- taulukkoon sen ensisijaisen avaimen Author_ID kautta . Olemme luoneet suhteen, jotta vältyttäisiin välilliseltä riippuvuudelta, joka on relaatiotietokantojen avaintekijä.
AUTHORS-taulukko :
- Author_ID → Tekijä: Tekijä riippuu Author_ID: stä .
- Tekijä → Author_Nationality: Kansalainen voi määrittää tekijä.
- Author_ID → Author_Nationality: Kansalaisuus voidaan määrittää Author_ID: stä Authorin attribuutin kautta. Meillä on edelleen siirtymävaiheen riippuvuus.
Näiden tietojen normalisointiin on lisättävä kolmas taulukko:
MAAT
Country_ID | Maa |
---|---|
Coun_001 | Yhdysvallat |
Coun_002 | Kanada |
TEKIJÄT
Author_ID | kirjailija | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Nyt meillä on kolme pöytää, jotka käyttävät ulkomaisia avaimia yhdistämään taulukoiden välillä:
- Kirjojen taulukon ulkonainen avain Author_ID linkittää kirjan tekijään AUTHORS- taulukossa.
- AUTHORS- taulukon ulkomainen avain Country_ID linkittää tekijän maalle COUNTRIES-taulukossa.
- COUNTRIES-taulukossa ei ole vierasta avainta, koska se ei ole tarpeen liittää toiseen taulukkoon tässä mallissa.
Miksi siirrettävät riippuvuudet ovat huonosti tietokannan suunnittelua
Mikä on vältettävien riippuvuuksien välttämisen arvo, joka auttaa varmistamaan 3NF: n? Katsotaanpa ensin meidän ensimmäinen taulukko ja tarkastelemme sen aiheita:
TEKIJÄT
Author_ID | kirjailija | Kirja | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Ender's Game | Yhdysvallat |
Auth_001 | Orson Scott Card | Mielen lapset | Yhdysvallat |
Auth_002 | Margaret Atwood | Käsikirjan tarina | Kanada |
Tällainen muotoilu voi osaltaan vaikuttaa datan poikkeamiin ja epäjohdonmukaisuuksiin, esimerkiksi:
- Jos poistit kaksi kirjaa "Mind of Children" ja "Ender's Game", poistat tekijän "Orson Scott Card" ja hänen kansalaisuutensa kokonaan tietokannasta.
- Et voi lisätä uutta tekijää tietokantaan, ellet lisää myös kirjaa; mitä jos tekijä on vielä julkaisematta tai et tiedä hänen kirjansa nimeä?
- Jos "Orson Scott Card" muutti kansalaisuutensa, sinun olisi muutettava se kaikkiin tietueisiin, joissa hän esiintyy. Jos sinulla on useita kirjauksia saman kirjoittajan kanssa, se voi johtaa epätarkkoihin tietoihin: mitä jos tietojen syöttö henkilö ei ymmärrä, hänellä on useita tietueita ja muuttaa tiedot vain yhdestä tietueesta?
- Et voi poistaa kirjan, kuten "The Handmaid's Tale", poistamatta kirjailijaa kokonaan.
Nämä ovat vain muutamia syitä, joiden vuoksi normalisointi ja välillisten riippuvuussuhteiden välttäminen suojaavat tietoja ja varmistavat johdonmukaisuuden.