Odnosi jedan prema više u bazi podataka

Sadržaj:

Odnosi jedan prema više u bazi podataka
Odnosi jedan prema više u bazi podataka
Anonim

Odnos jedan-prema-više u bazi podataka nastaje kada svaki zapis u tabeli A može imati mnogo povezanih zapisa u tabeli B, ali svaki zapis u tabeli B može imati samo jedan odgovarajući zapis u tabeli A.

Odnos jedan-prema-više u bazi podataka je najčešći dizajn relacijske baze podataka i u srcu je dobrog dizajna.

Baze podataka također mogu implementirati odnos jedan-na-jedan i odnos više-prema-više.

Image
Image

Primjer odnosa jedan-prema-više

Razmotrite odnos između nastavnika i kurseva koje predaju. Nastavnik može predavati više časova, ali kurs ne bi imao isti odnos sa nastavnikom.

Stoga, za svaki zapis u tabeli Nastavnici, može postojati mnogo zapisa u tabeli Kursevi. Ovaj primjer ilustruje odnos jedan-prema-više: jedan nastavnik na više kurseva.

Zašto je važno uspostavljanje veze jedan-prema-više

Za predstavljanje odnosa jedan-prema-više, potrebne su vam najmanje dvije tabele. Da vidimo zašto.

Pridržavanje prvog normalnog dizajna

Možda smo kreirali tabelu u koju želimo da zapišemo naziv i kurseve koji se predaju. Mogli bismo dizajnirati tabelu nastavnika i kurseva ovako:

Teacher_ID Ime_učitelja Kurs
Teacher_001 Carmen Biologija
Teacher_002 Veronika Matematika
Teacher_003 Jorge engleski

Šta ako Carmen predaje dva ili više kurseva? Imamo dvije opcije sa ovim dizajnom. Mogli bismo ga dodati Carmeninom postojećem zapisu, ovako:

Teacher_ID Učitelj_Ime Kurs
Teacher_001 Carmen biologija, matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge engleski

Međutim, gornji dizajn je nefleksibilan i može dovesti do problema kasnije kada umetnete, uredite ili izbrišete podatke. To otežava traženje podataka.

Ovaj dizajn takođe krši prvi princip normalizacije baze podataka, First Normal Form (1NF), koji kaže da svaka ćelija tabele treba da sadrži jedan, diskretni deo podataka.

Pravilo drugog normalnog oblika

Druga alternativa dizajnu bi mogla biti dodavanje drugog zapisa za Carmen:

Učitelj_ID Učitelj_Ime Kurs
Teacher_001 Carmen Biologija
Teacher_001 Carmen Matematika
Teacher_002 Veronika Matematika
Teacher_003 Jorge engleski

Ovaj pristup se pridržava 1NF-a, ali je i dalje loš dizajn baze podataka jer uvodi redundanciju i može nepotrebno naduti veliku bazu podataka. Što je još važnije, podaci bi mogli postati nedosljedni.

Na primjer, šta ako se Karmenino ime promijeni? Neko ko radi s podacima može ažurirati svoje ime u jednom zapisu i ne uspjeti ga ažurirati u drugom zapisu.

Ovaj dizajn krši standard drugog normalnog oblika (2NF), koji se pridržava 1NF i takođe mora izbjeći redundanciju višestrukih zapisa. 2NF pravilo to postiže razdvajanjem podskupova podataka u više tabela i stvaranjem odnosa između njih.

Kako dizajnirati bazu podataka sa vezama jedan-prema-više

Da implementirate odnos jedan-prema-više u tabeli Nastavnici i Kursevi, razbijte tabele na dva dela i povežite ih pomoću stranog ključa.

Ovdje smo uklonili kolonu Kurs u tabeli Nastavnici:

Učitelj_ID Učitelj_Ime
Teacher_001 Carmen
Teacher_002 Veronika
Teacher_003 Jorge

A evo tabele sa kursevima. Imajte na umu da njegov strani ključ, Teacher_ID, povezuje kurs sa nastavnikom u tabeli Nastavnici:

Course_ID Naziv_kursa Teacher_ID
Course_001 Biologija Teacher_001
Course_002 Matematika Teacher_001
Course_003 engleski Teacher_003

Razvili smo odnos između nastavnika i tabele kurseva koristeći strani ključ. Ovaj aranžman nam govori da Carmen predaje i biologiju i matematiku i da Jorge predaje engleski.

Možemo vidjeti kako ovaj dizajn izbjegava sve moguće redundancije, omogućava pojedinim nastavnicima da predaju više kurseva i implementira odnos jedan-prema više.

Preporučuje se: