Üks-mitmele suhted andmebaasis

Sisukord:

Üks-mitmele suhted andmebaasis
Üks-mitmele suhted andmebaasis
Anonim

Üks-mitmele seos andmebaasis tekib siis, kui igal tabeli A kirjel võib tabelis B olla palju lingitud kirjeid, kuid igal tabeli B kirjel võib olla tabelis A ainult üks vastav kirje.

Üks-mitmele seos andmebaasis on kõige levinum relatsioonilise andmebaasi kujundus ja see on hea disaini keskmes.

Andmebaasid võivad rakendada ka üks-ühele suhet ja mitu-mitmele suhet.

Image
Image

Näide üks-mitmele suhtest

Mõelge õpetaja ja tema õpetatavate kursuste vahelisele suhtele. Õpetaja võib õpetada mitut klassi, kuid kursusel ei oleks õpetajaga sama suhe.

Seetõttu võib õpetajate tabeli iga kirje kohta olla tabelis Kursused palju kirjeid. See näide illustreerib suhet üks-mitmele: üks õpetaja mitmele kursusele.

Miks on üks-mitmele suhte loomine oluline

Üks-mitmele seose esitamiseks vajate vähem alt kahte tabelit. Vaatame, miks.

Esimese tavavormi kujunduse järgimine

Võib-olla koostasime tabeli, kuhu tahame salvestada õpetatavate kursuste nimed ja kursused. Võime koostada õpetajate ja kursuste tabeli järgmiselt:

Õpetaja_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 kujundusega on meil kaks võimalust. Võiksime selle lisada Carmeni olemasolevale rekordile järgmiselt:

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

Ül altoodud kujundus on siiski paindumatu ja võib hiljem andmete sisestamisel, muutmisel või kustutamisel probleeme tekitada. See raskendab andmete otsimist.

See kujundus rikub ka andmebaasi normaliseerimise esimest põhimõtet, First Normal Form (1NF), mis väidab, et iga tabeli lahter peab sisaldama ühte diskreetset andmeosa.

Teine tavavormi reegel

Teine kujundus alternatiiv võib olla Carmeni teise rekordi lisamine:

Õpetaja_ID Õpetaja_Nimi Kursus
Teacher_001 Carmen Bioloogia
Teacher_001 Carmen Matemaatika
Teacher_002 Veronica Matemaatika
Teacher_003 Jorge inglise

See lähenemisviis järgib 1NF-i, kuid on endiselt kehva andmebaasi ülesehitusega, kuna see toob kaasa koondamise ja võib suure andmebaasi tarbetult paisutada. Veelgi olulisem on see, et andmed võivad muutuda ebajärjekindlaks.

Näiteks mis siis, kui Carmeni nimi muutuks? Keegi andmetega töötav inimene võib oma nime ühes kirjes värskendada ja teises kirjes mitte värskendada.

See disain rikub teise normaalvormi (2NF) standardit, mis järgib 1NF-i ja peab vältima ka mitme kirje üleliigsust. 2NF-reegel saavutab selle, eraldades andmete alamhulgad mitmeks tabeliks ja luues nende vahel seose.

Kuidas luua andmebaasi üks-mitmele suhetega

Üks-mitmele seose rakendamiseks tabelis Õpetajad ja kursused, jagage tabelid kaheks ja linkige need võõrvõtme abil.

Siin eemaldasime tabelist Õpetajad veeru Kursus:

Õpetaja_ID Õpetaja_Nimi
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Ja siin on Kursuste tabel. Pange tähele, et selle võõrvõti Teacher_ID lingib kursuse õpetajaga tabelis Teachers:

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

Oleme arendanud välisvõtme abil seose tabeli Õpetajad ja Kursused vahel. See korraldus ütleb meile, et Carmen õpetab nii bioloogiat kui matemaatikat ning Jorge inglise keelt.

Näeme, kuidas see ülesehitus väldib võimalikke koondamisi, võimaldab üksikutel õpetajatel õpetada mitut kursust ja rakendab üks-mitmele suhet.

Soovitan: