Razmerje ena proti mnogo v zbirki podatkov se pojavi, ko ima lahko vsak zapis v tabeli A veliko povezanih zapisov v tabeli B, vendar ima lahko vsak zapis v tabeli B samo en ustrezen zapis v tabeli A.
Razmerje ena proti mnogo v zbirki podatkov je najpogostejša zasnova relacijske baze podatkov in je v središču dobre zasnove.
Baze podatkov lahko izvajajo tudi razmerje ena proti ena in razmerje veliko proti mnogo.
Primer razmerja ena proti več
Razmislite o odnosu med učiteljem in predmeti, ki jih poučuje. Učitelj lahko poučuje več razredov, vendar tečaj ne bo imel enakega odnosa z učiteljem.
Zato je lahko za vsak zapis v tabeli Učitelji v tabeli Tečaji veliko zapisov. Ta primer ponazarja razmerje ena proti mnogo: en učitelj za več tečajev.
Zakaj je vzpostavitev razmerja ena proti mnogo pomembna
Za predstavitev razmerja ena proti mnogo potrebujete vsaj dve tabeli. Poglejmo zakaj.
Upoštevanje prve zasnove normalne oblike
Morda smo ustvarili tabelo, v katero želimo zabeležiti ime in predmete, ki jih poučujemo. Tabelo učiteljev in tečajev lahko oblikujemo takole:
ID_učitelja | Ime_učitelja | tečaj |
---|---|---|
Učitelj_001 | Carmen | Biologija |
Učitelj_002 | Veronika | Matematika |
Učitelj_003 | Jorge | angleščina |
Kaj če Carmen poučuje dva ali več predmetov? Pri tej zasnovi imamo dve možnosti. Lahko bi ga dodali v Carmenin obstoječi zapis, takole:
ID_učitelja | Učitelj_Ime | tečaj |
---|---|---|
Učitelj_001 | Carmen | Biologija, matematika |
Učitelj_002 | Veronika | Matematika |
Učitelj_003 | Jorge | angleščina |
Vendar je zgornja zasnova neprilagodljiva in lahko povzroči težave pozneje, ko vstavljate, urejate ali brišete podatke. Oteži iskanje podatkov.
Ta zasnova prav tako krši prvo načelo normalizacije baze podatkov, First Normal Form (1NF), ki navaja, da mora vsaka celica tabele vsebovati en sam, diskreten podatek.
Drugo pravilo normalne oblike
Druga oblika oblikovanja je lahko dodajanje drugega zapisa za Carmen:
Učitelj_ID | Učitelj_Ime | tečaj |
---|---|---|
Učitelj_001 | Carmen | Biologija |
Učitelj_001 | Carmen | Matematika |
Učitelj_002 | Veronika | Matematika |
Učitelj_003 | Jorge | angleščina |
Ta pristop se drži 1NF, vendar je še vedno slaba zasnova baze podatkov, ker uvaja redundanco in lahko po nepotrebnem napihne veliko bazo podatkov. Še pomembneje, podatki lahko postanejo nedosledni.
Na primer, kaj če bi se Carmen spremenilo ime? Nekdo, ki dela s podatki, lahko posodobi njeno ime v enem zapisu in ga ne uspe posodobiti v drugem zapisu.
Ta zasnova krši standard Druge normalne oblike (2NF), ki se drži 1NF in se mora izogibati tudi odvečnosti več zapisov. Pravilo 2NF to doseže z ločevanjem podnaborov podatkov v več tabel in ustvarjanjem razmerja med njimi.
Kako oblikovati zbirko podatkov z relacijami ena proti mnogo
Če želite implementirati razmerje ena proti mnogo v tabeli Učitelji in Tečaji, razdelite tabeli na dve in ju povežite s tujim ključem.
Tukaj smo odstranili stolpec Tečaj v tabeli Učitelji:
Učitelj_ID | Učitelj_Ime |
---|---|
Učitelj_001 | Carmen |
Učitelj_002 | Veronika |
Učitelj_003 | Jorge |
In tukaj je tabela tečajev. Upoštevajte, da njegov tuji ključ, Teacher_ID, povezuje tečaj z učiteljem v tabeli Učitelji:
Course_ID | Course_Name | ID_učitelja |
---|---|---|
Course_001 | Biologija | Učitelj_001 |
Course_002 | Matematika | Učitelj_001 |
Course_003 | angleščina | Učitelj_003 |
Razvili smo razmerje med učitelji in tabelo tečajev z uporabo tujega ključa. Ta ureditev nam pove, da Carmen poučuje biologijo in matematiko in da Jorge poučuje angleščino.
Vidimo lahko, kako se ta zasnova izogiba morebitnim odvečnim delom, omogoča posameznim učiteljem, da poučujejo več predmetov, in izvaja razmerje ena proti mnogo.