Mis on andmebaasi seos?

Sisukord:

Mis on andmebaasi seos?
Mis on andmebaasi seos?
Anonim

Kahe andmebaasitabeli vahel luuakse seos, kui üks tabel kasutab võõrvõtit, mis viitab teise tabeli primaarvõtmele. See on mõiste relatsiooniandmebaas taga põhikontseptsioon.

Kuidas välisvõti suhte loomiseks toimib

Esmane võti identifitseerib unikaalselt iga tabeli kirje. See on teatud tüüpi kandidaatvõti, mis on tavaliselt tabeli esimene veerg ja mida andmebaas saab automaatselt genereerida, et tagada selle kordumatus. Võõrvõti on teine kandidaatvõti (mitte primaarvõti), mida kasutatakse kirje linkimiseks teise tabeli andmetega.

Näiteks vaadake neid kahte tabelit, mis näitavad, milline õpetaja millist kursust õpetab. Siin on tabeli Kursused primaarvõti Course_ID. Selle võõrvõti on Teacher_ID:

Kursuse_ID Kursuse_nimi Õpetaja_ID
Kursus_001 Bioloogia Teacher_001
Kursus_002 Matemaatika Teacher_002
Kursus_003 inglise Teacher_003

Näete, et kursuste välisvõti vastab primaarvõtmele jaotises Teachers:

Õpetaja_ID Õpetaja_nimi
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Võime öelda, et võõrvõti Teacher_ID aitas luua seose kursuste ja õpetajate tabelite vahel.

Image
Image

Andmebaasisuhete tüübid

Võõrvõtmeid või muid kandidaatvõtmeid kasutades saate rakendada kolme tüüpi tabelite vahelisi seoseid:

Üks-ühele

Seda tüüpi suhe lubab suhte mõlemal poolel ainult ühte kirjet. Esmane võti on seotud ainult ühe kirjega (või mitte ühegi) teises tabelis. Näiteks abielus on kummalgi abikaasal ainult üks teine abikaasa. Sellist seost saab rakendada ühes tabelis ja seepärast ei kasutata võõrvõtit.

Üks-mitmele

Üks-mitmele seos võimaldab ühe tabeli ühe kirje seostada mitme teise tabeli kirjega. Mõelge ettevõttele, mille andmebaas sisaldab klientide ja tellimuste tabeleid.

Üks klient saab osta mitu tellimust, kuid ühte tellimust ei saa siduda mitme kliendiga. Seetõttu sisaldaks tabel Tellimused välisvõtit, mis ühtiks tabeli Kliendid primaarvõtmega, samas kui tabelis Kliendid ei oleks välisvõtit, mis osutaks tabelile Tellimused.

Mitu-mitmele

See on keeruline seos, milles paljud tabeli kirjed võivad linkida paljude teise tabeli kirjetega. Näiteks vajab meie ettevõte tõenäoliselt klientide ja tellimuste tabeleid ning tõenäoliselt ka toodete tabelit.

Jällegi on klientide ja tellimuste tabeli suhe üks paljudele, kuid mõelge tellimuste ja toodete tabeli seostele. Tellimus võib sisaldada mitut toodet ja toode võib olla seotud mitme tellimusega, kuna mitu klienti võivad esitada tellimuse, mis sisaldab mõnda sama toodet. Selline seos nõuab vähem alt kolme tabelit.

Miks on andmebaasisuhted olulised?

Järjepidevate seoste loomine andmebaasi tabelite vahel aitab tagada andmete terviklikkuse, aidates kaasa andmebaasi normaliseerimisele. Näiteks mis siis, kui me ei lingiks ühtegi tabelit võõrvõtme kaudu, vaid ühendaksime andmed tabelites Kursused ja Õpetajad, näiteks:

Õpetaja_ID Õpetaja_nimi Kursus
Teacher_001 Carmen Bioloogia, matemaatika
Teacher_002 Veronica Matemaatika
Teacher_003 Jorge inglise

See kujundus on paindumatu ja rikub andmebaasi normaliseerimise esimest põhimõtet, First Normal Form, mille kohaselt peab iga tabeli lahter sisaldama ühte diskreetset andmeosa.

Või võib-olla otsustasime lisada Carmenile teise rekordi, et jõustada 1NF:

Õpetaja_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 kujundus, mis põhjustab tarbetut dubleerimist ja nn andmete sisestamise kõrvalekaldeid, mis tähendab, et see võib kaasa aidata vastuolulistele andmetele. Näiteks kui õpetajal on mitu kirjet, mis siis, kui osa andmeid on vaja redigeerida, kuid andmete redigeerija ei saa aru, et on olemas mitu kirjet? Tabel sisaldaks siis sama isiku kohta erinevaid andmeid, ilma et oleks võimalik seda selgelt tuvastada või vältida.

Selle tabeli jagamine kaheks tabeliks – Õpetajad ja Kursused – loob andmete vahel õige seose ning aitab seega tagada andmete järjepidevuse ja täpsuse.

Soovitan: