Andmebaasi üks-paljud suhted

Andmebaasi üks- paar suhteid esineb siis, kui igal tabelis A sisalduval rekordil võib olla palju tabelis B seotud andmeid, kuid igal tabelis B oleval rekord võib tabelis A olla ainult üks vastav rekord. andmebaas on kõige levinum relatsioonandmebaasi disain ja on hea disaini keskmes.

Mõelge õpetaja suhetele õpetatavate kursuste vahel. Õpetaja võib õpetada mitmeid kursusi, kuid kursusel ei oleks õpetajaga samasugust suhet.

Seega, iga õpetaja tabeli kirje puhul võib kursuste tabelis olla palju kirjeid. See on üks-kõigile suhe: üks õpetaja mitmele kursusele.

Miks on üks-paar suhte kehtestamine oluline

Selleks, et esindada suhet üks-ühele, peate kasutama vähemalt kahte tabelit. Vaatame, miks

Võib-olla oleme loonud Õpetajate tabeli, milles tahame salvestada nime ja õpetatud kursusi. Me võiksime seda kujundada nii:

Õpetajad ja kursused
Teacher_ID Õpetaja_nimi Kursus
Teacher_001 Carmen Bioloogia
Teacher_002 Veronica Matemaatika
Teacher_003 Jorge Inglise

Mis siis, kui Carmen õpetab kahte või enamat kursust? Selle disainiga on meil kaks võimalust. Me võime lisada Carmeni olemasolevasse rekordi selleni nagu:

Õpetajad ja kursused
Teacher_ID Õpetaja _ nimi Kursus
Teacher_001 Carmen Bioloogia, matemaatika
Teacher_002 Veronica Matemaatika
Teacher_003 Jorge Inglise

Kuid ülaltoodud disain on paindumatu ja võib andmete kogumiseks, muutmiseks või kustutamiseks proovida hiljem probleeme.

See muudab andmete otsimise raskeks. See disain rikub andmebaasi normaliseerimise esimest põhimõtet, First Normal Form (1 Normal Form) (1NF) , mis sätestab, et iga tabeli lahtris peaks olema üks üksik diskreetne andmeüksus.

Teine disain alternatiiv võib olla lihtsalt lisada teine ​​kirje Carmen:

Õpetajad ja kursused
Õpetaja _ID Õpetaja _ nimi Kursus
Teacher_001 Carmen Bioloogia
Teacher_001 Carmen Matemaatika
Teacher_002 Veronica Matemaatika
Teacher_003 Jorge Inglise

See järgib 1NF-i, kuid see on ikka veel halb andmebaaside disain, sest see toob kaasa koondamise ja võib tarbetult suurt andmebaasi pahatahtlikult. Veelgi olulisem on see, et andmed võivad muutuda vastuoluliseks. Näiteks, mis siis, kui Carmeni nimi oleks muudetud? Keegi, kes töötab andmetega, võib värskendada oma nime ühes rekordis ja seda ei uuenda teises reas. See disain rikub teise normaalse vormi (2NF), mis järgib 1NF-i, ning peab vältima ka mitmete dokumentide koondamist, eraldades andmete alamhulgad mitmesse tabelisse ja luues seose nende vahel.

Kuidas kujundada andmebaas mitme suhtega

Õppurite ja kursuste tabelist ühe-kuni-mitme suhte rakendamiseks murime tabelid kaheks ja ühendame need välisvõti kasutades.

Siin oleme eemaldanud kursuse veeru õpilaste tabelis:

Õpetajad
Õpetaja _ID Õpetaja _ nimi
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Ja siin on kursuste laud. Pange tähele, et selle võõrkeel, Teacher_ID, ühendab kursuse Õpetajate tabelis õpetajaga:

Kursused
Course_ID Course_Name Teacher_ID
Course_001 Bioloogia Teacher_001
Course_002 Matemaatika Teacher_001
Kursus_003 Inglise Teacher_003

Oleme välja töötanud suhte õpetajate ja kursuste tabeli vahel, kasutades välisvõtit.

See ütleb meile, et nii Carmen kui ka bioloogia ja matemaatika õpetavad ja Jorge õpetab inglise keelt.

Näeme, kuidas see disain vältab võimalikke koondamisi, võimaldab üksikute õpetajate õpetada mitmeid kursusi ja rakendab üks-kõigile suhteid.

Andmebaasid võivad rakendada ka üks-ühele suhteid ja palju-suhteid.