Andmebaasi suhted on kõikide relatsioonandmebaaside selgroog
Kahe andmebaasi tabeli vahel on seos, kui ühel tabelil on võti, mis viitab teise tabeli primaarvõti. See on mõiste "relatsioonandmebaas" peamine mõiste.
Kuidas välismaine võti toimib suhete loomiseks
Vaatame põhi- ja võõrkeele põhitõdesid. Primaarvõti tuvastab unikaalselt kõik tabelis olevad rekordid. See on kandidaadi võti tüüp, mis on tavaliselt tabeli esimene veerg ja mida andmebaas võib automaatselt genereerida, et tagada, et see on ainulaadne.
Võõrvõti on teise kandidaadi võti (mitte primaarvõti), mida kasutatakse teise tabeli andmete salvestamiseks.
Näiteks kaaluge neid kahte tabelit, mis määravad, millist õpetajat kursus õpetab.
Siin on kursuste tabeli peamine võti Course_ID. Selle võõrkeelne võti on Teacher_ID:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Bioloogia | Teacher_001 |
Course_002 | Matemaatika | Teacher_001 |
Kursus_003 | Inglise | Teacher_003 |
Näete, et võõrkeel kursustel sobib õpetajate esmaseks võtmeks:
Teacher_ID | Õpetaja_nimi |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Võime öelda, et Teacher_ID välisvõti on aidanud luua suhte kursuste ja õpetajate tabelite vahel.
Andmebaasi seoste tüübid
Välisklahvide või muude kandidaatide võtmete abil saate rakendada kolme tüüpi suhteid tabelite vahel:
Üks-ühele : selline suhe võimaldab suhet mõlemal küljel ainult ühe rekordiga.
Esmane võti on seotud ainult ühe rekordiga - või mitte - teise tabelisse. Näiteks abielul on igal abikaasal ainult üks teine abikaasa. Seda tüüpi suhteid saab rakendada ühes tabelis ja seega ei kasuta välisvõtit.
Üks-mitmele : üks-ühele suhe võimaldab ühes tabelis ühte rekordit seostada teise tabeli mitme kirjega.
Mõelge äri andmebaasiga, millel on klientide ja tellimuste tabelid.
Üks klient saab osta mitu tellimust, kuid ühe tellimuse ei saa mitme klientiga linkida. Seetõttu peaks tellimuste tabel sisaldama võti, mis vastab Klientide tabeli esmasele võtmele, samal ajal kui Klientide tabelil pole tellimuste tabelisse viidavat võtit.
Paljud-paljud : see on keeruline suhe, kus paljud tabelis olevad kirjed võivad linkida paljude teise tabeli kirjetega. Näiteks vajab meie ettevõte tõenäoliselt mitte ainult kliente ja tellimuste tabeleid, vaid ka tõenäoliselt ka toodete tabelit.
Jällegi on suhe Klientide ja tellimuste tabeli vahel üks-kuni-teisel, kuid võta arvesse suhet tellimuste ja toodete tabeli vahel. Tellimus võib sisaldada mitut toodet ja toode võib olla seotud mitme tellimusega: mitu klienti võivad esitada tellimuse, mis sisaldab mõnda samu tooteid. Selline suhe nõuab vähemalt kolme tabelit.
Mis on andmebaasi suhted tähtsad?
Andmebaasi tabelite püsivate seoste loomine aitab tagada andmete terviklikkust, aidates kaasa andmebaasi normaliseerimisele. Näiteks, mis siis, kui me ei seostanud ühtegi tabelit välisvõtiga, vaid lihtsalt ühendasime kursuste ja õpetajate tabelite andmed nii:
Teacher_ID | Õpetaja_nimi | Kursus |
---|---|---|
Teacher_001 | Carmen | Bioloogia, matemaatika |
Teacher_002 | Veronica | Matemaatika |
Teacher_003 | Jorge | Inglise |
See disain on paindumatu ja rikub esimest andmebaasi normaliseerimise põhimõtet - First Normal Form (1 Normaalvorm) (1NF), mis sätestab, et iga tabeli lahtris peaks olema üks üksik diskreetne andmeüksus.
Või ehk me otsustasime lihtsalt lisada Carmenile teise rekordi, et jõustada 1NF:
Teacher_ID | Õpetaja_nimi | Kursus |
---|---|---|
Teacher_001 | Carmen | Bioloogia |
Teacher_001 | Carmen | Matemaatika |
Teacher_002 | Veronica | Matemaatika |
Teacher_003 | Jorge | Inglise |
See on endiselt nõrk disain, mis toob kaasa ebavajaliku dubleerimise ja mida nimetatakse andmete sisestamise kõrvalekaldeks , mis lihtsalt tähendab, et see võib kaasa aidata vastuolulistele andmetele.
Näiteks kui õpetaja omab mitu kirjet, siis kui mõnda andmeid tuleb redigeerida, siis ei teosta andmete töötlemisega tegelev isik seda, et on olemas mitu kirjet? Seejärel sisaldab tabel sama isiku kohta erinevaid andmeid, ilma et oleks selget võimalust seda tuvastada või seda vältida.
Selle tabeli lõhkumine kaheks tabeliks, õpetajad ja kursused (nagu eespool visualiseeritud) loob andmete nõuetekohase suhte ning aitab seega tagada andmete järjepidevust ja täpsust.