Vältige transientset sõltuvust, et aidata normaliseerida
Transitiivne sõltuvus andmebaasis on kaudne seos sama tabeli väärtuste vahel, mis põhjustab funktsionaalse sõltuvuse . Kolmanda normaalse vormi (3NF) normaliseerimise standardi saavutamiseks peate kõrvaldama igasuguse ülemineku sõltuvuse.
Oma olemuselt vajab läbitavat sõltuvust kolm või enam atribuuti (või andmebaasi veergu), millel on nende vahel funktsionaalne sõltuvus, mis tähendab, et tabeli A veerg tugineb veergu B vahepealse veergu C.
Vaatame, kuidas see võib toimida.
Transitiivne sõltuvusnäide
AUTORID
| Autor_ID | Autor | Raamat | Autoriõigus |
|---|---|---|---|
| Auth_001 | Orson Scott Card | Enderi mäng | Ühendriigid |
| Auth_001 | Orson Scott Card | Enderi mäng | Ühendriigid |
| Auth_002 | Margaret Atwood | Käsitsi prantsuse tale | Kanada |
Eespool olevas AUTHORS näites:
- Raamat → Autor : siin atribuut Book määrab atribuudi Author . Kui teate raamatu nime, saate autori nime teada saada. Autor aga raamatu ei määra, sest autor saab kirjutada mitu raamatut. Näiteks lihtsalt sellepärast, et me teame autori nime Orson Scott Cardi, me ikka veel raamatu nime ei tea.
- Autor → Author_Nationality : samamoodi määrab atribuut Author atribuut Author_Nationality , kuid mitte vastupidi; lihtsalt sellepärast, et me teame kodakondsust, ei tähenda, et saame autori kindlaks määrata.
Kuid see tabel tutvustab transitiivset sõltuvust:
- Book → Author_Nationality: kui me teame raamatu nime, võime kodakondsuse määrata veeru Author abil.
Transitiivsete sõltuvuste vältimine
Kolmanda normaalse vormi tagamiseks eemaldame transitiivse sõltuvuse.
Võime alustada raamatu veeru eemaldamisest tabelist Autorid ja eraldi raamatute tabeli loomine:
RAAMATUD
| Book_ID | Raamat | Autor_ID |
|---|---|---|
| Book_001 | Enderi mäng | Auth_001 |
| Book_001 | Mind lapsed | Auth_001 |
| Book_002 | Käsitsi prantsuse tale | Auth_002 |
AUTORID
| Autor_ID | Autor | Autoriõigus |
|---|---|---|
| Auth_001 | Orson Scott Card | Ühendriigid |
| Auth_002 | Margaret Atwood | Kanada |
Kas see parandas seda? Vaatame nüüd meie sõltuvusi:
RAAMATUD tabel :
- Book_ID → Raamat: raamat sõltub Book_ID-st .
- Selles tabelis pole muid sõltuvust, seega on meil kõik korras. Pange tähele, et välisvõti Autor_ID seob selle tabeli AUTHORSI tabeli kaudu oma primaarvõtme Autor_ID . Oleme loonud suhte, et vältida transitiivset sõltuvust - relatsioonandmebaaside peamist disaini.
AUTORID tabel :
- Author_ID → Autor: Autor sõltub autorist_ID .
- Autor → Author_Nationality: Kodakondsuse võib määrata autor.
- Author_ID → Author_Nationality: Kodakondsust saab määrata Author_ID kaudu atribuudi Author . Meil on ikkagi transitiivne sõltuvus.
Selle andmete normaliseerimiseks peate lisama kolmanda tabeli:
RIIGID
| Riik_ID | Riik |
|---|---|
| Coun_001 | Ühendriigid |
| Coun_002 | Kanada |
AUTORID
| Autor_ID | Autor | Riik_ID |
|---|---|---|
| Auth_001 | Orson Scott Card | Coun_001 |
| Auth_002 | Margaret Atwood | Coun_002 |
Nüüd on meil kolm tabelit, kasutades võõrklaasid lauda ühendamiseks:
- BOOKi tabeli võõrkeel Autor_ID loob raamatut autorile tabelis AUTHORS .
- AUTORI tabeli võõrvõti Country_ID lingib autor COUNTRIES tabelis olevale riigile.
- Tabelitel COUNTRIES puudub võti, sest pole vaja linke selle disaini teise tabelisse.
Miks transitiivsed sõltuvad on halb andmebaaside disain
Milline on ülemineku sõltuvuste vältimise väärtus, et aidata 3NF-i tagada? Vaatame uuesti oma esimese tabeli ja näeme välja need probleemid:
AUTORID
| Autor_ID | Autor | Raamat | Autoriõigus |
|---|---|---|---|
| Auth_001 | Orson Scott Card | Enderi mäng | Ühendriigid |
| Auth_001 | Orson Scott Card | Mind lapsed | Ühendriigid |
| Auth_002 | Margaret Atwood | Käsitsi prantsuse tale | Kanada |
Selline kujundus võib kaasa aidata andmete anomaaliatele ja vastuoludele, näiteks:
- Kui kustutasite kaks raamatut "Mind lapsed" ja "Ender's Game", kustutate autori "Orson Scott Card" ja tema kodakondsuse andmebaasist täielikult.
- Te ei saa andmebaasi lisada uut autorit, kui te ei lisa ka raamatut; mis siis, kui autor on veel avaldamata või te ei tea raamatu nime, mille ta on loonud?
- Kui "Orsoni Scott Card" muudab oma kodakondsust, peate muutma seda kõikides dokumentides, milles ta ilmub. Sama autori arvukate dokumentide saamine võib kaasa tuua ebatäpseid andmeid: mis siis, kui andmete sisestamise inimene ei mõista, on temale mitu kirjet ja muudab andmeid ainult ühes rekordis?
- Sa ei saa sellist raamatut nagu "The Handmaid's Tale" kustutada, ilma et autot täielikult kustutataks.
Need on vaid mõned põhjused, miks normaliseerimine ja transitiivsete sõltuvuste vältimine, andmete kaitse ja järjepidevuse tagamine.