Relaciona baza podataka Baza podataka se sastoji iz
Relaciona baza podataka @Baza podataka se sastoji iz više tabela koje su u relaciji (medjusobno povezane). @Prilikom kreiranja baze podataka poželjno je kreirati veći broj tabela sa manje obeležja (polja).
@Kad god u tabeli postoji ponavljanje jednog dela podataka, potrebno je kolone u kojima se podaci ponavljaju izdvojiti u novu tabelu, dodeliti im ključ (npr. u obliku broja), a u osnovnoj tabeli ostaviti strani ključ. @Ovaj postupak se naziva proces normalizacije podataka.
Prvi zadatak je razdvojiti podatke na tabele. Jedan od načina na koji posmatramo podatke je da uočimo one koji se ponavljaju: NASLOV KNJIGE Prokleta avlija Isijavanje Mračna kula Knjige krvi Utkani svet Čekajući Godoa IME PISCA Ivo Andrić Stiven King Klajv Barker Semjuel Beket NOBEL YES NO NO NO BROJ STRANA 150 250 450 600 NAZIV ŽANRA IST HOR FAN HOR ROĐE N 1892 1947 1960 UMRO 1975 1947 1960 NO 500 FAN 1960 YES 90 DRA 1906 1989 Za svaku knjigu koju je napisao Stiven King moramo da ponovimo sve podatke koji su vezani za njega. Isto to važi i za Klajva Barkera.
Očigledno je da ćemo izdvojiti podatke o piscima u zasebnu tabelu i kasnije ćemo pozivati te podatke preko njihovog ključa. Drugim rečima, pokušaćemo da bazu dovedemo u formu sličnu ovoj: NASLOV KNJIGE Prokleta avlija Isijavanje Mračna kula Knjige krvi Utkani svet Čekajući Godoa PRIMARNI KLJUČ a b c d STRANI KLJUČ a b b c c d IME PISCA Ivo Andrić Stiven King Klajv Barker Semjuel Beket BROJ STRANA 150 250 450 600 500 90 NOBEL YES NO NO YES NAZIV ŽANRA IST HOR FAN DRA ROĐEN 1892 1947 1960 1906 UMRO 1975 1947 1960 1989
Što se tiče samih polja koja su nam data, odmah možemo da ih rasporedimo u ove dve tabele, na sledeći način: KNJIGE NASLOV (txt) required = yes BR_STRANA (num) ZANR (txt) size = 3 PISCI IME (txt) size = 50 NOBEL (y / n) RODJEN (num) default = 0 UMRO (num) caption = "Godina smrti" Sledeći korak je određivanje primarnog ključa.
Primarni ključ (Primary key) @ Povezivanje je moguće samo ako tabele sadrže zajednička polja (ključna polja za povezivanje moraju biti istog tipa ). @ Uloga ključnih polja je jednoznačana identifikacija slogova @ Primarni ključ (Primary key) je polje (ili polja) čiji je sadržaj u svakom zapisu jedinstven (ne sme da sadrži duplikate). @ Primarni ključ odredjuje korisnik prilikom definisanja strukture tabele.
Potrebno je: – u strukturi aktivne tabele izabrati polje. – u Toolbaru kliknuti na dugme Primary Key ili desni klik. – u suprotnom Access će sam odrediti polje za primarni ključ i to obično polje ID tipa Autonumber
@Strani ključ (Foreign key) je polje (ili polja) koji je jednak vrednosti primarnog ključa druge tabele.
Pošto ne možemo sa sigurnošću da tvrdimo da se nikada neće pojaviti dve knjige istog naslova ili dva pisca istog imena, moraćemo sami da odredimo dva nova polja koja će biti primarni ključevi za tabele. KNJIGE SIFRA (autonumber) NASLOV (txt) required = yes BR_STRANA (num) ZANR (txt) size = 3 PISCI ID (txt) size = 1 IME (txt) size = 50 NOBEL (y / n) RODJEN (num) default = 0 UMRO (num) caption = "Godina smrti" U ovom slučaju smo se odlučili da: -primarni ključ za tabelu KNJIGE bude autonumber (Access će sam unositi vrednosti u tabeli), dok će - primarni ključ u tabeli PISCI biti tekstualnog tipa, veličine 1 (znači samo jedan znak, odnosno slovo - u praksi bi ovako nešto bilo teško izvodljivo zbog mogućeg velikog broja pisaca, ali za ovaj naš primer je prihvatljivo).
Vrste relacija @ 1: 1 (One to one) Svaki slog iz prve tabele može imati samo jedan odgovarajući u drugoj tabeli i obrnuto. @ 1: N (One to many) Najčešće korišćena relacija. Jednom slogu iz prve tabele može se pridružiti više slogova druge tabele @ N: N (Many to many) Predstavlja kombinaciju relacija 1: n i n: 1 uz pomoć treće tabele koja sadrži strane ključeve iz prve dve tabele.
Konačno, moramo nekako da povežemo ove dve tabele. U najvećem broju slučajeva koristimo veze tipa jedan-prema-više. Ova veza podrazumeva dodavanje novog polja (stranog ključa) u jednoj od tabela koje će se povezivati sa primarnim ključem druge tabele. Veza jedan-prema-jedan bi podrazumevala da jednom redu prve tabele odgovara tačno jedan red druge tabele, pri čemu bi se povezivali primarni ključevi. Pošto očigledno nije slučaj da imamo tačno jednu knjigu od jednog pisca, ovde će se koristiti veza jedan-prema-više. Naša situacija je da imamo VIŠE knjiga koje je pisao JEDAN pisac. Po pravilu, tabela koja sadrži strani ključ može imati VIŠE podataka koji se odnose na JEDAN podatak iz druge tabele. To znači da će tabela KNJIGE imati strani ključ koji se povezuje sa primarnim ključem iz tabele PISCI. Strani ključ mora biti istog tipa kao primarni ključ sa kojim se povezuje. Tako dodajemo polje PISAC u tabelu KNJIGE, koje je istog tipa kao polje ID iz tabele PISCI. KNJIGE SIFRA (autonumber) NASLOV (txt) required = yes BR_STRANA (num) ZANR (txt) size = 3 PISAC (txt) size = 1 PISCI ID (txt) size = 1 IME (txt) size = 50 NOBEL (y / n) RODJEN (num) default = 0 UMRO (num) caption = "Godina smrti"
Kreiranje relacije
Integritet podataka (Integrity) @Obezbedjivanje ispravnosti veza izmedju podatka (tabela) u bazi.
Referencijalni integritet @Obezbeđuje očuvanje veza između tabela. @Važi isključivo za ključna polja tabela. @ On se proverava kad god se doda, izmeni ili izbriše polje primarnog ili spoljnog ključa.
Enforce Referential Integrity) se postavlja u prozoru Edit Relationships
Ako zadate tu opciju, moći ćete da zadate i opcije: @ Cascade Update Related Fields (lančano ažuriranje povezanih polja) Korisniku je dozvoljeno da menja sadržaj povezujućih polja, odnosno polja primarnog ključa u primarnoj tabeli. U tom slučaju stare vrednosti zamenjuje novim u svim povezanim zapisima druge tabele. Ukoliko ova opcija nije potvrđena ne možete da menjate sadržaj polja primarnog ključa u primarnoj tabeli koja je povezana sa drugom tabelom.
@ Cascade Delete Related Records (lančano brisanje povezanih zapisa) ukoliko korisnik pokuša da izbriše zapis u primarnoj tabeli, a u tabeli sa kojom je povezana primarna postoje zapisi koji su sa tim zapisom povezani, najpre mora da izbriše sve povezane zapise u tabeli sa kojom je povezana primarna, pa tek onda i zapis u primarnoj tabeli. Da biste koristili ovu opciju morate da zadate lančano brisanje povezanih polja u svim vezama baze podataka u kojima učestvuje određena tabela.
- Slides: 21