Andmebaaside suhted

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:

Kursused
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:

Õpetajad
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:

Õpetajad ja kursused
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:

Õpetajad ja kursused
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.