U prethodnim nastavnim jedinicama definisane su različite vrste ograničenja, odnosno pravila integriteta. Ova pravila su statička, odnosno daju uslove koje podaci u bazi podataka treba da zadovolje u stacionarnom stanju, odnosno po okončanju bilo koje transakcije. Međutim, za potpunu specifikaciju baze podataka nekog IS, pored ograničenja, od interesa je i akcija koju treba preduzeti kada neka operacija ažuriranja baza podataka naruši definisano ograničenje. Ovakva specifikacija daje se preko tzv. dinamičkih pravila integriteta. Jedno dinamičko pravilo integriteta čini trojka:
<OPERACIJA, OGRANIČENJE, AKCIJA>
preko koje se, za svaku OPERACIJU odražvanja baza podataka i svako OGRANIČENJE koje ona može da naruši, definiše AKCIJA koju treba preduzeti, ako je ograničenje narušeno.
Kako smo izvršili podelu ograničenja na ograničenja na domene atributa, složena vrednosna ograničenjnja i strukturna ograničenja, na isti način možemo podeliti i dinamička pravila integriteta.
Ograničenja na vrednosti atributa mogu narušiti operacije održavanja Insert i Update. Očigledno je da će se, bez obzira na to koja je od ovih operacija narušila ograničenje, preduzeti ista akcija. Zbog toga u definisanju dinamičkog pravila integriteta ove vrste nije neophodno navoditi operaciju. Ranije je pokazano da je najpraktičnije ograničenje na atribute prikazati preko tabele sa kolonama ATRIBUT, DOMEN, OGRANIČENJE.
Slika 1
Za iskazivanje dinamičkog pravila integriteta za atribute dovoljno je ovu tabelu proširiti kolonom AKCIJA i formirati, na primer, tabelu.
Kako je u ovoj vrsti dinamičkog pravila integriteta akcija, gotovo uvek, poruka sa odgovarajućim tekstom, ovu vrstu pravila obično nije neophodno ni navoditi, već je dovoljno zadati samo ograničenja na atribute, podrazumevajući da su ona ovako specificirana.
U najkraćem se može reći da dinamičko pravilo integriteta čini trojka <Ograničenje, Operacija, Akcija> preko koje se iskazuje koja se akcija preduzima kada neka operacija naruši definisano ograničenje. Kada se ista akcija preduzima bez obzira na to koja je operacija narušila ograničenje, dovoljno je definisati samo ograničenje i akciju.
Prosta ograničenja, odnosno ograničenja na pojedinačne vrednosti atributa mogu narušiti operacije ubacivanja novog pojavljivanja u klasu i ažuriranje vrednosti atributa nekog pojavljivanja. Zbog toga, kod definisanja dinamičkog pravila integriteta ove vrste nije neophodno navoditi operaciju. Kako je kod ovog dinamičkog pravila integriteta akcija uvek odbijanje (poništavanje) operacije uz poruku sa odgovarajućim tekstom, ovu vrstu pravila obično i ne navodimo.
Kao što je ranije rečeno, složena vrednosna ograničenja definišu međuzavisnosti vrednosti različitih atributa i specifikuju se pomoću iskaza objektnog računa. Za svako vrednosno ograničenje i listu operacija koje ga mogu narušiti definiše se akcija koju treba preduzeti kada je oganičenje narušeno.
Za ova pravila integriteta je uobičajeno da je akcija koja se definiše jedinstvena za sva moguća narušavanja posmatranog ograničenja. Za specifikaciju ovih ograničenja koristi se iskaz tipa:
CREATE INTEGRITY RULE naziv_pravila
Ograničenje i naziv_ograničenja
ON ATTEMPTED VIOLATION akcija
Primer:
CREATE INTEGRITY RULE StudentiPetogSemestra
Foreach Student (If Student.Semestar >=5 Then Card (Student.Prijava) >10)
ON ATTEMPTED VIOLATION Rollback, Poruka “Student ne zadovoljava uslov”
Strukturna ograničenja u PMOV definisana su samom strukturom modela, odnosno načinom međusobnog povezivanja različitih klasa objekata. Operacije održavanja baze podataka mogu da naruše strukturna ograničenja narušavajući kardinalnost preslikavanja preko kojih su ostvarene veze između klasa objekata. Pri definiciji semantike pojedinih operacija održavanja baze podataka pretpostavljeno je sledeće:
Imajući ovo u vidu, očigledno je da strukturna ograničenja mogu narušiti samo operacije connect i disconnect, bilo da se neposredno primenjuju, bilo da su automatski idukovane od drugih operacija, pa samo za ove operacije treba definisati dinamička strukturna pravila integriteta.
Operacija:
connect naziv_preslikavanja(id_domena:vrednost, id_kodomena:vrednost)
Na primer:
connect RUKOVODI (MLB:307, ŠIFOD:03)
narušava integritet ako u klasi objekta koji predstavlja kodomen preslikavanja ne postoji navedeno pojavljivanje. Pretpostavlja se da pojavljivanje klase domena mora uvek da postoji da bi se ova opercija uopšte izvršila. Akcije koje se u ovom slučaju preduzimaju su:
Slika 2
Ako objekat kodomena, sa kojim dati objekat domena treba povezati ne postoji, moguće ga je prvo kreirati operacijom insert, pa zatim izvršiti odgovarajuće povezivanje. Ovu opciju zadovoljavanja integriteta nazvaćemo CASCADES. Očigledno je da ova opcija može da okine (Trigger) čitavu kaskadu opercija u bazi podataka.
Ubacivanje nepostojećeg pojavljivanja u klasu kodomena povlači automatski operacije connect za sva njegova obavezna preslikavanja, a ove preko svojih mogućih opcija zadovoljenja integiteta CASCADES ubacivanje objekata u odgovarajuće klase kodomena i tako dalje.
Operacija:
connect naziv_preslikavanja opcij
opcija :: RESTRICTED - NULLIFIES - DEFAULT - CASCADES
Na primer:
connect RUKOVODI RESTRICTED
Ako vrednost argumenata kodomena ne postoji u klasi ODELJENJE, operacija se odbija.
Slika 3
connect RADI CASCADES
Operacija connect RADI ne može se direktno izvršavati jer ovo preslikavanje ima kardinalnosti DG=1 i GG=1, odnosno svaki radnik u bazi je već vezan za neko odeljenje i može biti vezan samo za jedno odeljenje. Međutim, ova operacija se automatski poziva pri izvršenju operacije.
insert RADNIK (MLB:mmm;IME:iiiii, ZANIMANJE:z, STAROST:35, ŠIFOD:xx)
Ako odeljenje sa ŠIFOD = xx ne postoji u klasi ODELJENJE, ono se kreira i izvrši povezivanje preslikavanja RADI.
Slika 4
Pri izvršavanju operacije connect podrazumeva se da se ne narušava gornja granica kardinalnosti odgovarajućeg preslikavanja, odnosno operacija connect se uvek odbija ako narušava gornju granicu kardinalnosti preslikavanja.
Operacija disconnect je još interesantnija.
disconnect naziv_preslikavanja(id_domena:vrednost, id_kodomena:vrednost)
Na primer:
disconnect RUKOVODI (MLB:307, ŠIFOD:03)
Operacija disconnect se može direktno izvršavati samo kod preslikavanja kod kojih je donja granica kardinalnosti različita od gornje. Ako se ne može izvršavati direktno, ova operacija može biti automatski pozvana od operacije delete iz klase domena, disconnect inverznog preslikavanja ili operacije recconect. Ova operacija raskida vezu objekta domena sa nekim kodomenom i na taj način, ako je posmatrano, preslikavanje obavezno, narušava odgovarajuće strukturno ograničenje. Očigledno je da je operacija disconnect kritična za ona preslikavanja čija je donja granica kardinalnosti DG=1 (ili preciznije DG>0). U tom slučaju pojavljivanje u klasi domena ostaje bez svog obaveznog preslikavanja.
Slika 5