Odnosi s bazama podataka predstavljaju kičmu svih relacionih baza podataka
Veza se uspostavlja između dve tabele baze podataka kada jedna tablica ima inostrani ključ koji se odnosi na primarni ključ druge tabele. Ovo je osnovni koncept iza pojma relacijske baze podataka.
Kako stranački ključ radi na uspostavljanju veze
Pogledajmo osnove primarnih i stranih ključeva. Primarni ključ jedinstveno identifikuje svaki zapis u tabeli. To je tip ključa kandidata koji je obično prvi stupac u tablici i može se automatski generirati od strane baze podataka kako bi se osiguralo da je jedinstven.
Strani ključ je još jedan ključ kandidata (nije primarni ključ) koji se koristi za povezivanje zapisa sa podacima u drugoj tabeli.
Na primer, razmotrite ove dve tabele koje identifikuju koji nastavnik predaje koji se kurs.
Ovde je primarni ključ tablice kurseva Course_ID. Njegov inostrani ključ je Teacher_ID:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | Biologija | Teacher_001 |
Course_002 | Matematika | Teacher_001 |
Course_003 | Engleski | Teacher_003 |
Možete videti da inostrani ključ u kursevima odgovara primarnom ključu u nastavnicima:
Teacher_ID | Teacher_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Možemo reći da je stranački ključ Teacher_ID pomogao uspostaviti odnos između tabela Kursevi i Učitelja.
Vrste odnosa sa bazama podataka
Koristeći strane ključeve ili druge ključeve kandidata, možete izvršiti tri vrste odnosa između tabela:
One-to-one : Ovakav odnos omogućava samo jedan zapis sa obe strane veze.
Primarni ključ se odnosi na samo jedan zapis - ili nijedan - u drugoj tabeli. Na primer, u braku, svaki supružnik ima samo još jednog supružnika. Ovakav odnos može se implementirati u jednoj tabeli i stoga ne koristi inostrani ključ.
One-to-many : Odnos od jednog do drugog omogućava da jedan zapis u jednoj tabeli bude povezan sa više zapisa u drugoj tabeli.
Razmislite o poslovanju sa bazom podataka koja ima tabele kupaca i porudžbina.
Jedan kupac može kupiti više naloga, ali pojedinačna porudžbina ne može biti povezana sa više kupaca. Prema tome, tabela narudžbina bi sadržala inostrani ključ koji odgovara primarnom ključu tabele kupaca, dok tabelu kupaca ne bi bilo stranog ključa koji ukazuje na tablicu Orders.
Mnogi-do-mnogi : Ovo je kompleksan odnos u kojem mnogi zapisi u tabeli mogu da se povežu sa mnogim zapisima u drugoj tabeli. Na primer, našem poslovanju verovatno nisu potrebne samo tablice Kupci i narudžbe, ali verovatno je potrebna i tablica proizvoda.
Ponovo, odnos između tabele Kupci i narudžbe je jedan-do-mnogi, ali uzmite u obzir odnos između tabele Narudžbe i proizvodi. Nalog može da sadrži više proizvoda, a proizvod može biti povezan sa više naloga: nekoliko kupaca može da podnese nalog koji sadrži neke od istih proizvoda. Ova vrsta odnosa zahteva najmanje tri tabele.
Šta su veze sa bazama podataka važne?
Uspostavljanje konzistentnih odnosa između tabela baze podataka pomaže u osiguranju integriteta podataka, doprinoseći normalizaciji baze podataka. Na primjer, šta ako nismo povezali bilo koje tablice preko inostranog ključa i umjesto toga samo spojili podatke u tabele Kursevi i Nastavnici, kao što su:
Teacher_ID | Teacher_Name | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologija, matematika |
Teacher_002 | Veronica | Matematika |
Teacher_003 | Jorge | Engleski |
Ovaj dizajn je nefleksibilan i krši prvi princip normalizacije baze podataka, First Normal Form (1NF), koji navodi da svaka ćelija tablice treba da sadrži jedan pojedinačni diskretni podatak.
Ili smo možda odlučili da jednostavno dodamo još jedan rekord za Carmen, kako bi izvršili 1NF:
Teacher_ID | Teacher_Name | Kurs |
---|---|---|
Teacher_001 | Carmen | Biologija |
Teacher_001 | Carmen | Matematika |
Teacher_002 | Veronica | Matematika |
Teacher_003 | Jorge | Engleski |
Ovo je i dalje slab dizajn, uvodeći nepotrebno dupliranje i ono što se zovu anomalije unošenja podataka , što samo znači da može doprinijeti nekonzistentnim podacima.
Na primjer, ako nastavnik ima više zapisa, šta ako neki podaci trebaju biti uređeni, ali osoba koja vrši izmjenu podataka ne shvata da postoji više zapisa? Tabela bi zatim sadržala različite podatke za istog pojedinca, bez ikakvog jasnog načina da se to identifikuje ili da se izbjegne.
Prebacivanje ove tabele na dve tabele, Nastavnici i kursevi (kako je prikazano u gornjem tekstu), stvara pravilnu vezu između podataka i stoga pomaže u postizanju konzistentnosti i tačnosti podataka.