Jedan od ciljeva dobrog dizajna baze podataka jeste uklanjanje redundantnosti podataka (dupliranih podataka). Za postizanje tog cilja, potrebno je da podatke podelite u više tabela zasnovanih na temi kako bi svaka činjenica bila predstavljena samo jednom. Zatim programu Pristup obezbedite način na koji će podeljene informacije ponovo spojiti – to radite postavljanjem zajedničkih polja u tabele koje su povezane. Međutim, da biste ispravno izvršili ovaj korak, prvo morate razumeti relacije između tabela, a zatim navesti te relacije u bazi podataka.
U ovom članku
Uvod
Kada kreirate tabelu za svaku temu u bazi podataka, programu Pristup morate dati način na koji će po potrebi ponovo spojiti te informacije. Ovo postižete postavljanjem zajedničkih polja u tabele koje su povezane i definisanjem relacija između tabela. Zatim možete kreirati upite, obrasce i izveštaje koji istovremeno prikazuju informacije iz nekoliko tabela. Na primer, prikazani obrazac sadrži informacije izvučene iz nekoliko tabela:
1. Informacije u ovom obrascu potiču iz tabele „Klijenti“…
2. …tabele „Porudžbine“…
3. …tabele „Proizvodi“…
4. …i tabele „Detalji porudžbine“.
Ime klijenta u polju Ispostavi račun preuzeto je iz tabele „Klijenti“, vrednosti za ID porudžbine i datum porudžbine preuzete su iz tabele „Porudžbine“, ime proizvoda potiče iz tabele „Proizvodi“, a vrednosti za cenu po jedinici i količinu potiču iz tabele „Detalji porudžbine“. Ove tabele su međusobno povezane na više načina kako bi se informacije iz svake od njih našle u obrascu.
U prethodnom primeru, polja u tabelama moraju biti koordinisana tako da prikazuju informacije o istoj porudžbini. Ova koordinacija je postignuta korišćenjem relacija među tabelama. Relacija među tabelama funkcioniše tako što podudara podatke u ključnim poljima – često se radi o polju sa istim imenom u obe tabele. U većini slučajeva, polja koja se podudaraju su primarni ključ iz jedne tabele, koji obezbeđuje jedinstveni identifikator svakog zapisa i sporedni ključ u drugoj tabeli. Na primer, zaposleni mogu biti povezani sa porudžbinama za koje su odgovorni kreiranjem relacije među tabelama između polja „ID zaposlenog“ u tabelama „Zaposleni“ i „Porudžbine“.
1. Polje „ID zaposlenog“ pojavljuje se u obe tabele – kao primarni ključ ...
2. ... i kao sporedni ključ.
Tipovi relacija među tabelama
Postoje tri tipa relacija među tabelama u programu Access.
-
Relacija jedan-prema-više
Hajde da iskoristimo bazu podataka za praćenje porudžbina koja sadrži tabele „Klijenti“ i „Porudžbine“ kao primer. Klijent može da napravi neograničen broj porudžbina. Iz toga sledi da za svakog kupca iz tabele „Klijenti“ može da postoji više porudžbina u tabeli „Porudžbine“. Relacija između tabela „Klijenti“ i „Porudžbine“ predstavlja relaciju jedan-prema-više.
Uzmite primarni ključ na strani relacije „jedan“ i dodajte ga kao dodatna polja u tabelu na strani relacije „više“ kako biste u dizajnu baze podataka predstavili relaciju jedan-prema-više. U ovom slučaju, na primer, dodajete novo polje – polje ID-a iz tabele „Klijenti“ – u tabelu „Porudžbine“ i dajete mu ime „ID klijenta“. Pristup zatim može da koristi broj ID-ova klijenata u tabeli „Porudžbine“ da bi pronašao odgovarajućeg klijenta za svaku porudžbinu.
-
Relacija više-prema-više
Hajde sada da pogledamo relaciju između tabela „Proizvodi“ i „Porudžbine“. Jedna porudžbina može sadržati više proizvoda. S druge strane, jedan proizvod može da se pojavi u više porudžbina. Prema tome, za svaki zapis u tabeli „Porudžbine“ može da postoji više zapisa u tabeli „Proizvodi“. Osim toga, za svaki zapis u tabeli „Proizvodi“ može da postoji više zapisa u tabeli „Porudžbine“. Ova relacija se naziva relacija više-prema-više. Imajte u vidu da je važno da razmotrite obe strane relacije kako biste otkrili postojeće relacije više-prema-više između tabela.
Odgovor je da kreirate treću tabelu, koja se često naziva spojena tabela koja razdvaja relaciju više-prema-više na dve relacije jedan-prema-više. Umetnite primarni ključ iz svake od dve tabele u treću tabelu. Kao rezultat toga, treća tabela zapisuje svako pojavljivanje ili instancu relacije. Na primer, „Porudžbine“ i „Proizvodi“ imaju relaciju "više-prema-više" koja je definisana kreiranjem dve relacije jedan-prema-više u tabelu "Detalji porudžbine". Jedna porudžbina može imati više proizvoda, a svaki proizvod može da se pojavi u više porudžbina.
-
Relacija jedan-prema-jedan
U relaciji jedan-prema-jedan svaki zapis u prvoj tabeli može imati samo jedan podudarni zapis u drugoj tabeli i svaki zapis iz druge tabele može imati samo jedan podudarni zapis iz prve tabele. Ova relacija nije uobičajena zato što su informacije povezane na ovaj način najčešće uskladištene u istoj tabeli. Relaciju jedan-prema-jedan možete koristiti da biste podelili tabelu sa više polja, da biste izolovali deo tabele iz bezbednosnih razloga ili da biste uskladištili informacije koje se primenjuju samo na podskup glavne tabele. Kada identifikujete takvu relaciju, obe tabele moraju da dele zajedničko polje.
Zašto kreirati relacije među tabelama?
Relacije među tabelama možete da kreirate izričitim korišćenjem prozora „Relacije“ ili prevlačenjem polja iz okna Lista polja. Pristup koristi relacije među tabelama da bi odlučio kako se spajaju tabele kada treba da ih koristite u objektu baze podataka. Postoji više razloga zbog kojih treba da kreirate relacije među tabelama pre nego što kreirate druge objekte baze podataka, kao što su obrasci, upiti i izveštaji.
-
Relacije među tabelama utiču na dizajn upita
Morate da kreirate upit koji spaja tabele da biste radili sa zapisima iz više tabela. Upit funkcioniše tako što povezuje vrednosti polja primarnog ključa prve tabele sa poljem sporednog ključa u drugoj tabeli. Na primer, da biste dobili redove koji prikazuju sve porudžbine za svakog kupca, kreiraćete upit koji na osnovu polja „ID kupca“ spaja tabelu „Klijenti“ sa tabelom „Porudžbine“. U prozoru „Relacije“ možete ručno da navedete polja koja će biti spojena. Međutim, ako već imate definisanu relaciju među tabelama, Pristup pruža podrazumevano spajanje na osnovu postojeće relacije među tabelama. Pored toga, ako koristite neki čarobnjak za upite, Pristup upotrebljava informacije koje prikuplja iz relacija među tabelama koje ste već definisali kako bi vam predstavio dovoljnu količinu informacija na osnovu kojih možete birati, kao i da bi unapred popunio postavke svojstava odgovarajućim podrazumevanim vrednostima.
-
Relacije među tabelama obezbeđuju informacije za dizajn obrazaca i izveštaja
Kada dizajnirate obrazac ili izveštaj, Pristup upotrebljava informacije koje prikuplja iz relacija među tabelama koje ste već definisali kako bi vam predstavio dovoljnu količinu informacija na osnovu kojih možete birati, kao i da bi unapred popunio postavke svojstava odgovarajućim podrazumevanim vrednostima.
-
Relacije među tabelama predstavljaju osnovu na koju možete nametnuti referencijalni integritet da biste u bazi podataka sprečili pojavu zapisa koji su siročići. Zapis koji je siroče jeste zapis sa referencom na drugi zapis koji ne postoji – na primer, zapis porudžbine koji referencira zapis klijenta koji ne postoji.
Kada dizajnirate bazu podataka, informacije delite u tabele od kojih svaka ima primarni ključ. Nakon toga, u povezane tabele dodajete sporedne ključeve koji referenciraju ove primarne ključeve. Parovi sporedni ključ-primarni ključ formiraju osnovu relacija među tabelama i upita za više tabela. Važno je da reference sporedni ključ-primarni ključ budu sinhronizovane. Referencijalni integritet, koji zavisi od relacija među tabelama, pomaže u održavanju sinhronizovanosti referenci.
Razumevanje referencijalnog integriteta
Kada dizajnirate bazu podataka, informacije baze podataka delite u više tabela na osnovu teme kako biste umanjili redundantnost podataka. Zatim programu Pristup date načina na koji će podaci ponovo spojiti postavljanjem zajedničkih polja u povezane tabele. Na primer, da biste predstavili relaciju jedan-prema-više, uzećete primarni ključ iz tabele „jedan“ i dodati ga kao dodatno polje u tabelu „više“. Da bi povezao podatke, Pristup preuzima vrednost iz tabele „više“ i traži odgovarajuću vrednost u tabeli „jedan“. Na ovaj način, vrednosti u tabeli „više“ referenciraju odgovarajuće vrednosti u tabeli „jedan“.
Pretpostavimo da imate relaciju „jedan-prema-više“ između tabela „Špediteri“ i „Porudžbine“ i želite da izbrišete nekog špeditera. Ako špediter koga želite da izbrišete ima porudžbine u tabeli „Porudžbine“, one će postati „siročići“ kada izbrišete zapis. Porudžbine će još uvek sadržati ID špeditera, ali ID više neće biti važeći zato što zapis koji on referencira više ne postoji.
Svrha referencijalnog integriteta jeste sprečavanje pojave siročića i održavanje sinhronizovanosti referenci kako do ove hipotetičke situacije nikada ne bi došlo.
Referencijalni integritet namećete tako što ga omogućavate za relaciju među tabelama. Kada je referencijalni integritet jednom nametnut, Pristup odbija svaku operaciju koja narušava referencijalni integritet te relacije među tabelama. To znači da će Pristup odbiti da izvrši ažuriranja koja menjaju odredište reference, kao i brisanja koja uklanjaju odredište reference. Moguće je da imate potpuno opravdanu potrebu da promenite primarni ključ za špeditera koji ima porudžbine u tabeli „Porudžbine“. U takvim slučajevima potrebno je da Pristup, kao deo jedne operacije, automatski ažurira sve redove na koje promena utiče. Na taj način Pristup obezbeđuje izvršavanje kompletnog ažuriranja i konzistentnost baze podataka, pri čemu su svi redovi ažurirani. Iz ovog razloga Pristup opciju Kaskadno ažuriraj povezana polja . Kada nametnete referencijalni integritet i odaberete opciju Kaskadno ažuriraj povezana polja, a zatim ažurirate primarni ključ, Pristup će automatski ažurirati sva polja koja referenciraju taj primarni ključ.
Takođe je moguće da imate potpuno opravdanu potrebu da izbrišete red i sve povezane zapise – na primer, zapis špeditera i sve povezane porudžbine za tog špeditera. Iz tog razloga Pristup podržava opciju Kaskadno izbriši povezane zapise. Kada nametnete referencijalni integritet i odaberete opciju Kaskadno izbriši povezane zapise, a zatim izbrišete zapis na strani primarnog ključa relacije, Pristup će automatski izbrisati sve zapise koji referenciraju taj primarni ključ.
Prikaz relacija među tabelama
Na kartici Alatke baze podataka kliknite na dugme Relacije da biste prikazali relacije među tabelama. Otvoriće se prozor „Relacije“ u kome su prikazane sve postojeće relacije. Ako nijedna relacija među tabelama nije definisana, a prozor „Relacije“ otvarate prvi put, Pristup će zatražiti od vas da u prozor dodate tabelu ili upit.
Otvaranje prozora „Relacije“
-
Izaberite stavku Datoteka, kliknite na dugme Otvori, a zatim izaberite i otvorite bazu podataka.
-
Na kartici Alatke baze podataka, u grupi Relacije izaberite stavku Relacije.
-
Na kartici Dizajn relacija , u grupi Relacije izaberite stavku Sve relacije.
To prikazuje sve definisane relacije u bazi podataka. Imajte u vidu da skrivene se tabele (tabele za koje je u dijalogu Svojstva potvrđen izbor u polju za potvrdu Skriveno) i njihove relacije neće prikazati, osim ako je u dijalogu Opcije za navigaciju potvrđen izbor u polju za potvrdu Prikaži skrivene objekte.
Relacija među tabelama je predstavljena relacionom linijom povučenom između tabela u prozoru „Relacije“. Relacija za koju nije nametnut referencijalni integritet pojavljuje se kao tanka linija između zajedničkih polja koja podržavaju tu relaciju. Kada izaberete ovu relaciju klikom na liniju, linija će postati deblja, što označava da je izabrana. Ako nametnete referencijalni integritet za ovu relaciju, linija će postati deblja na krajevima. Osim toga, broj 1 će se pojaviti iznad debljeg dela linije na jednoj strani relacije, a simbol za beskonačno (∞) iznad debljeg dela linije na drugoj strani.
Kada je prozor „Relacije“ aktivan, na traci možete izabrati neku od sledećih komandi:
Na kartici Dizajn relacija , u grupi Alatke :
-
Uredi relacije Otvara dijalog Uređivanje relacija. Kada izaberete relacionu liniju, možete kliknuti na dugme Uredi relacije da biste promenili relaciju među tabelama. Možete takođe dvaput da kliknete na relacionu liniju.
-
Obriši raspored Uklanja sve tabele i relacije iz prikaza u prozoru „Relacije“. Imajte u vidu da ova komanda samo sakriva tabele i relacije – ne briše ih.
-
Izveštaj o relacijama Kreira izveštaj koji prikazuje tabele i relacije u bazi podataka. Izveštaj prikazuje samo tabele i relacije koje nisu skrivene u prozoru „Relacije“.
Na kartici Dizajn relacija , u grupi Relacije :
-
Dodaj tabele Omogućava izbor tabela za prikazivanje u prozoru "Relacije".
-
Sakrij tabelu Sakriva izabranu tabelu u prozoru „Relacije“.
-
Direktne relacije Prikazuje sve relacije i povezane tabele za izabranu tabelu u prozoru „Relacije“, ukoliko one već nisu prikazane.
-
Sve relacije Prikazuje sve relacije i povezane tabele u bazi podataka u prozoru „Relacije“. Imajte na umu da skrivene tabele (tabele za koje je u dijalogu Svojstva potvrđen izbor u polju za potvrdu Skriveno) i njihove relacije neće biti prikazane, osim ako je u dijalogu „Opcije navigacije“ potvrđen izbor u polju za potvrdu „Prikaži skrivene objekte“.
-
Zatvori Zatvara prozor „Relacije“. Ako ste promenili raspored u prozoru „Relacije“, bićete upitani da li želite da sačuvate promene.