RAČUNARSTVO I INFORMATIKA

Почетак » Kreiranje veza

Category Archives: Kreiranje veza

14. Pojam veza, kreiranje veza između tabela

14. Pojam veza, kreiranje veza između tabela

Nakon pravljenja tabela prelazi se na njihovo medusobno povezivanje. Osnovni uslov za uspostavljanje veze izmedu dve tabele je da oba polja izmedu kojih se uspostavlja veza sadrže istu vrstu podataka. Ta polja ne moraju da imaju i ista imena, ali širina polja i tip podataka moraju da budu jednaki. Vrednost koja se nalazi u povezujucim poljima odredenih zapisa obe tabele mora da bude ista da bi veza bila uspostavljena. Veza se najcešce uspostavlja tako što se medusobno povezuju kljucna polja obe tabele, odnosno primarni kljuc jedne tabele i spoljni kljuc druge tabele.

Pošto smo u bazi podataka Osobe napravili tabele Radnik, Grad, Radna istorija, Radno mesto, Telefoni kreirajmo veze između ovih tabela.

untitled

Pošto smo ovo već uradili na nekom  od prethodnih časova pređimo na povezivanje tabela, uspostavljanjem veza.

Da bi se izvršilo povezivanje tabela u bazi podataka, potrebno je iz Ribbon palete izabrati tab Database Tools, pa Relationships. Tada de se otvoriti prozor,kao i tab Design.

Dodavanje tabela u Relationships prozor 

Prostor rezervisan za kreiranje veza između tabela je trenutno prazan, jer još uvek nisu definisane veze. Potrebno je dodati tabele i povezati ih. Dodavanje tabela vrši se njihovim prevlačenjem ili desnim klikom miša na prazan prostor otvoriti meni iz kojeg je potrebno izabrati Show Table, a zatim dodati željene tabele.

untitled

Povezivanje tabela – jak i slab entitet, spoljni ključ, agregacija, unarna veza

Sada je potrebno povezati odgovarajuće tabele. Tabela Radnik i Grad imaju povezujuće polje grad, odnosno IDgrada. Atribut grad u tabeli Radnik predstavlja spoljni ključ, dok je IDgrada u tabeli Grad on primarni ključ. Ove tabele se povezuju tako što se primarni ključ tabele Grad mišem prevlači na spoljni ključ grad tabele Radnik. Kada se otpusti taster miša, otvoriće se prozor prikazan na sledećoj slici

untitled

Referencijalni integritet – Opcija Enforce Referential Integrity 

Na prethodnoj slici  primećuju se dve kolone: Table i Related Table. Prva se odnosi na tabelu Grad i njen atribut IDgrada, a druga na tabelu Radnik i njen atribut grad. Ispod ovoga, postoji opcija Enforce Referential Integrity koju je moguće uključiti. Ova opcija se odnosi na referencijalni integritet. Ukoliko se uključi, baza podataka neće dozvoliti unos vrednosti spoljnog ključa ukoliko ona ne postoji kao vrednost primarnog ključa odgovarajuće tabele. U ovom konkretnom slučaju to bi značilo da baza podataka neće dozvoliti korisniku da u tabelu Radnik upiše vrednost atributa grad koja ne postoji u tabeli Grad.

Referencijalni integritet – Opcija Cascade Update Related Fields 

Kada se opcija Enforce Referential Integrity uključi, dozvoljava se uključivanje i preostale dve opcije. Cascade Update Related Fields, kao što naziv kaže, kaskadno ažurira (Update) povezujuća polja (Fields). To znači da, ukoliko se promeni primarni ključ tabele, vrednost tog primarnog ključa u ulozi spoljnog ključa odgovarajuće tabele de se automatski ažurirati, tj. dobiti novu vrednost. U primeru, ukoliko bi se promenila neka vrednost atributa IDgrada u tabeli Grad, automatski bi se ta vrednost dodelila odgovarajudem spoljnom ključu grad u tabeli Radnik. Ukoliko se naziv grada u tabeli Grad promeni, automatski bi se prikazivala nov naziv grada polja grad u tabeli Radnik, jer je podešeno da ovo polje prikazuje nazive gradova, a ne IDgrada.

Referencijalni integritet – Opcija Cascade Delete Related Records

Treća opcija, Cascade Delete Related Records, razlikuje se od prethodne opcije u dve reči: Delete i Records. Kao što naziv kaže, ova opcija omogućava kaskadno brisanje (Delete) povezujudih slogova, tj. instanci, objekata (Records). Dakle, ukoliko bi se obrisala neka instanca tabele, automatski bi se obrisale sve instance odgovarajude tabele(a) koje su povezane sa primarnim ključem obrisane instance. U primeru, ukoliko bi se obrisao neki grad, dakle jedna cela instanca iz tabele Grad, obrisali bi se i svi radnici iz tabele Radnik koji su iz tog grada, tj. svi koji sadrže primarni ključ grada koji je obrisan. U ovom slučaju to ne bi imalo smisla, pa ne bi trebalo uključiti ovu opciju prilikom povezivanja tabela Grad i Radnik. Međutim, pri povezivanju tabela Radnik i Telefoni ova opcija se preporučuje, jer ukoliko dođe do brisanja nekog radnika iz baze podataka, svakako bi se preporučilo i brisanje svih njegovih brojeva telefona, jer nema smisla čuvati ih.

Dakle, može se uočiti da je veza prepoznata kao veza tipa one-to-many i nakon svih podešavanja, tj. uključivanja prve dve opcije i potvrđivanjem na dugme Create, veza izgleda kao na sledećoj slici

untitled

Dalje, potrebno je povezati tabele Radnik i Telefoni, prevlačenjem IDradnika iz tabele Radnik na IDradnika tabele Telefoni i uključiti potrebne opcije referencijalnog integriteta kao na sledećoj slici

untitled

Ova veza je, takođe, tipa one-to-many i izgleda kao na sledećoj slici

untitled

Preostalo je još da se poveže tabela Radnik unarnom vezom. Ovo znači da je potrebno dodati u Relationships prozor još jednu tabelu Radnik. Dodavanje tabele se vrši klikom desnim tasterom miša na prazno mesto u ovom prozoru, a zatim se iz menija izabere Show Table, a zatim i tabela Radnik. Sada će se u prozoru Relationships prikazati tabela sa nazivom Radnik_1. Povezati atribut IDRadnika iz tabele Radnik sa atributom Nadređeni iz tabele Radnik_1, s tim što je potrebno uključiti opcije Enforce Referential Integrity i Cascade Update Related Fields. Opcija Cascade Delete Related Records ne treba da se uključi, jer ukoliko se obriše jedan radnik, ne znači da treba da se obrišu i svi oni koji su sa njim povezani preko spoljnog ključa unarne veze. Ova unarna veza prikazana je na sledećoj slici

untitled

Sada su sve tabele povezane i Relationships prozor izgleda kao na sledećoj slici

untitled

Prilikom zatvaranja prozora Relationships, u pop-up prozoru korisniku se postavlja pitanje da li želi da sačuva promene u Layout-u. Tu se ne misli na čuvanje veza koje su prethodno definisane, već na sam izgled Relationships prozora i raspored tabela u njemu. Čak i kada se neka od tabela izbriše u prozoru Relationships, to ne znači ni da je tabela obrisana iz baze podataka, niti da su obrisane njene veze sa drugim tabelama, već je samo obrisana iz ovog prozora kako bi se ostale tabele mogle preglednije složiti.