Odnos jedan prema više u bazi podataka događa se kada svaki zapis u tablici A može imati mnogo povezanih zapisa u tablici B, ali svaki zapis u tablici B može imati samo jedan odgovarajući zapis u tablici A.
Odnos jedan prema više u bazi podataka najčešći je dizajn relacijske baze podataka i srž je dobrog dizajna.
Baze podataka također mogu implementirati odnos jedan-na-jedan i odnos više-prema-više.
Primjer odnosa jedan prema više
Razmotrite odnos između nastavnika i kolegija koje predaje. Učitelj može predavati više razreda, ali tečaj neće imati isti odnos s učiteljem.
Stoga, za svaki zapis u tablici Nastavnici, može postojati mnogo zapisa u tablici Tečajevi. Ovaj primjer ilustrira odnos jedan prema više: jedan nastavnik prema više tečajeva.
Zašto je uspostavljanje odnosa jedan-na-više važno
Da biste predstavili odnos jedan prema više, potrebne su vam najmanje dvije tablice. Da vidimo zašto.
Pridržavanje prvog dizajna normalnog oblika
Možda smo izradili tablicu u koju želimo zabilježiti naziv i predmete koje podučavamo. Mogli bismo dizajnirati tablicu nastavnika i tečajeva ovako:
ID_učitelja | Ime_učitelja | Tečaj |
---|---|---|
Učitelj_001 | Carmen | Biologija |
Učitelj_002 | Veronika | Matematika |
Učitelj_003 | Jorge | engleski |
Što ako Carmen predaje dva ili više kolegija? S ovim dizajnom imamo dvije mogućnosti. Mogli bismo to dodati u Carmenin postojeći zapis, ovako:
ID_učitelja | Učitelj_Ime | Tečaj |
---|---|---|
Učitelj_001 | Carmen | Biologija, matematika |
Učitelj_002 | Veronika | Matematika |
Učitelj_003 | Jorge | engleski |
Međutim, gornji dizajn je nefleksibilan i može rezultirati problemima kasnije kada umetnete, uredite ili izbrišete podatke. To otežava pretraživanje podataka.
Ovaj dizajn također krši prvo načelo normalizacije baze podataka, First Normal Form (1NF), koji navodi da svaka ćelija tablice treba sadržavati jedan, diskretni dio podataka.
Drugo pravilo normalnog oblika
Druga alternativa dizajnu može biti dodavanje drugog 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 | engleski |
Ovaj pristup se pridržava 1NF-a, ali je još uvijek loš dizajn baze podataka jer uvodi redundanciju i može nepotrebno napuhati veliku bazu podataka. Još važnije, podaci bi mogli postati nedosljedni.
Na primjer, što ako se Carmenino ime promijeni? Netko tko radi s podacima mogao bi ažurirati njezino ime u jednom zapisu i ne uspjeti ga ažurirati u drugom zapisu.
Ovaj dizajn krši standard drugog normalnog oblika (2NF), koji je u skladu s 1NF i također mora izbjegavati redundantnost više zapisa. 2NF pravilo to postiže odvajanjem podskupa podataka u više tablica i stvaranjem odnosa između njih.
Kako dizajnirati bazu podataka s relacijama jedan prema više
Da biste implementirali odnos jedan-prema-više u tablici Nastavnici i Tečajevi, razdvojite tablice na dvije i povežite ih pomoću stranog ključa.
Ovdje smo uklonili stupac Tečaj u tablici Nastavnici:
Učitelj_ID | Učitelj_Ime |
---|---|
Učitelj_001 | Carmen |
Učitelj_002 | Veronika |
Učitelj_003 | Jorge |
A ovdje je tablica Tečajevi. Imajte na umu da njegov strani ključ, Teacher_ID, povezuje tečaj s nastavnikom u tablici Učitelji:
ID_tečaja | Course_Name | ID_učitelja |
---|---|---|
Tečaj_001 | Biologija | Učitelj_001 |
Tečaj_002 | Matematika | Učitelj_001 |
Tečaj_003 | engleski | Učitelj_003 |
Razvili smo odnos između nastavnika i tablice Tečajevi koristeći strani ključ. Ovaj nam raspored govori da Carmen predaje i biologiju i matematiku, a da Jorge predaje engleski.
Možemo vidjeti kako ovaj dizajn izbjegava sve moguće redundancije, omogućuje pojedinačnim nastavnicima da predaju više kolegija i implementira odnos jedan prema više.