Ü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.
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.