Integritet u relacionim bazama podataka Nenad Mitić Matematički fakultet nenad@matf.bg.ac.rs
a a - DATE-AIDB Pojam se u kontekstu baza podataka odnosi na preciznost, punovažnost i korektnost podataka u bazi Održavanje a podataka je od najveće važnosti za RSUBP. Zbog toga se u sistemu definišu pravila (tzv. ograničenja a) koja se primenjuju na podatke ciklus 5.2
(nastavak) a a - DATE-AIDB Intuitivno, ograničenje a je logički izraz pridružen bazi za koga se zahteva da njegovo izračunavanje uvek daje vrednost tačno ciklus se proveravaju pri formiranju objekata u bazi ili menjanju njihovog sadržaja 5.3
Ni jednoj operaciji ažuriranja nije dozvoljeno da ostavi bilo koji relvar u stanju koje narušava bilo koje od ograničenja tog relvar-a. Verzija 1: Ni jednoj operaciji ažuriranja nije dozvoljeno da ostavi bilo koju bazu podataka u stanju u kome se neki od atributa baze izračunava kao netacno (posledica: pre bilo kakvog stvarnog ažuriranja proverava se važenje ograničenja) a a - DATE-AIDB ciklus 5.4
a a - DATE-AIDB ograničenja a: Ocena dobijena na ispitu mora da bude u intervalu od 5 do 10. CONSTRAINT OCENA1 IS EMPTY (ISPIT WHERE OCENA<5 OR OCENA>10) ciklus 5.5
a Klasifikacija prema DATE-AIDB : definišu prihvatljiva stanja u bazi : definišu prihvatljiva stanja prelaza u bazi a a - DATE-AIDB ciklus 5.6
baze: ograničenja koja se odnose na vrednosti koje je dozvoljeno čuvati u bazi (tj. koje se odnose na dve ili više različitih relacija) relacija (relvar-a): zadaje se ograničenje na vrednost pojedinačne relacije (relvar-a) koje se proverava pri ažuriranju te relacije a a - DATE-AIDB ciklus 5.7
(nastavak) a a - DATE-AIDB atributa: ograničenja na skup dozvoljenih vrednosti datog atributa tipa: definicija skupova vrednosti koji čine dati tip ciklus 5.8
- primeri a a - DATE-AIDB Ogranicenja tipa TYPE POINT POSSREP CARTESIAN (X RATIONAL, Y RATIONAL) CONSTRAINT ABS (THE_X (POINT)) <= 100.0 AND ABS(THE_Y (POINT)) <= 100.0 ; ciklus 5.9
- primeri Ogranicenja atributa VAR PREDMET BASE RELATION { ID_PREDMETA INTEGER, SIFRA SIFRA, NAZIV NAZIV, BODOVI SMALLINT }; a a - DATE-AIDB ciklus 5.10
- primeri Ogranicenja relacija CONSTRAINT REL1 IF NOT ( IS_EMPTY ( PREDMET ) ) THEN COUNT ( PREDMET END IF; a a - DATE-AIDB WHERE SIFRA= SIFRA ( R270 )) > 0 Ako uopšte postoji neki predmet tada bar jedna od njih mora da ima šifru R270. ciklus 5.11
- primeri Ogranicenja baze CONSTRAINT BAZA1 FORALL DOSIJE D FORALL ISPIT I IS_EMPTY (( D JOIN I ) WHERE I.INDEKS > 20150000 AND I.INDEKS = D.INDEKS AND GODINA_ROKA=GODINA_ROKA(2015); Ni jedan student upisan na studije 2015 godine ne može da polaže uspit u 2015 godini a a - DATE-AIDB ciklus 5.12
: ako baza sadrži podatke o osobama tada su važeca sledeća ograničenja: Nije dozvoljeno venčanje vec venčanih osoba Dozvoljeno je venčati se sa razvedenom osobom Osobe koje više nisu žive ne mogu da primaju platu (penziju,...)... a a - DATE-AIDB ciklus Šta bi bila ograničenja prelaza u slučaju baze podataka o studentima? 5.13
a - drugi pogled a a - DATE-AIDB Klasifikacija prema tipu ograničenja koje mora da bude ispoštovano u bazi Integritet domena Integritet redundatnosti Integritet (poslovnih) ograničenja ciklus 5.14
relacije R predstavlja podskup atributa X te relacije, ako važi: Pravilo jedinstvenosti: ne postoje dve torke u relaciji R koje imaju iste vrednosti za X, i Pravilo minimalnosti: ne postoji pravi podskup skupa X koji zadovoljava pravilo jedinstvenosti. Svaka relacija ima bar jednog kandidata za ključ (skup svih atributa ili neki njegov pravi podskup) a a - DATE-AIDB ciklus 5.15
a Primarni ključ - jedan od kandidata za ključ Alternativni ključevi - ostali kandidati Spoljašnji (strani) ključ - skup atributa jednog relvar-a R2 čije vrednosti treba da odgovaraju vrednostima nekog kandidata za ključ nekog relvar-a R1 Superključ - nadskup kandidata za ključ; poseduje jedinstvenost ali ne i minimalnost a - DATE-AIDB ciklus 5.16
Relvar DOSIJE - primarni ključ je INDEKS Relvar PREDMET - primarni ključ je ID_PREDMETA Relvar ISPITNI_ROK - primarni ključ je par atributa (GODINA_ROKA, OZNAKA_ROKA) Relvar ISPIT primarni ključ je (INDEKS, ID_PREDMETA, GODINA_ROKA, OZNAKA_ROKA) spoljašnji ključevi su - (GODINA_ROKA, OZNAKA_ROKA) - INDEKS - ID_PREDMETA a a - DATE-AIDB ciklus 5.17
a a - DATE-AIDB Osnovna ideja očuvanja a u ovom slucaju je da sve vrednosti u ma treba da budu usaglašene : ako ispit sadrži podatke o studentu za koga ne postoje informacije u tabeli dosije tada je došlo da narušavanja a baze ciklus Spoljašnji ključevi u relaciji ispit? 5.18
(nastavak) a a - DATE-AIDB Spoljašnji ključ predstavlja referencu na torku koji sadrži odgovarajući primarni kljuc. Odatle je problem osiguravanja da baza podataka ne sadrži pogrešne spoljašnje ključeve poznat kao problem referencijalnog a, a ograničenja koja to omogućuju se nazivaju referencijalna ograničenja. ciklus 5.19
(nastavak) a a - DATE-AIDB Relacija koja sadrži primarne ključeve se naziva roditelj relacija, a relacija koja sadrži spoljašnje ključeve koji se referišu na roditelj relaciju se naziva dete relacija. ciklus : Baza ne sme da sadrži neuparene vrednosti spoljašnjih ključeva 5.20
(nastavak) a a - DATE-AIDB Relvar-i koji nemaju kandidate za ključ (tj. sadrže duple slogove) se ponašaju nepredvidivo u pojedinim situacijama (videti primer1a.sql iz 5.primeri.sql) Sistem koji ne poseduje znanje o kandidatima za ključ ponekad pokazuje karakteristike koje nisu "čisto relacione". ciklus 5.21
(nastavak) a a - DATE-AIDB Definicija spoljasnjih kljuceva: FOREIGN KEY lista atributa REFERENCES ime relvar-a ciklus 5.22
a a - DATE-AIDB Pravilo brisanja CASCADE RESTRICT NO ACTION SET NULL Pravilo ažuriranja RESTRICT NO ACTION ciklus 5.23
ciklus a a - DATE-AIDB T n T n 1 T n 2... T 1 T n Roditelj i dete ne moraju da budu različite tabele VAR STUDENTI BASE RELATION {INDEKS INDEKS,..., PARLAMENT INDEKS,...} PRIMARY KEY {INDEKS} FOREIGN KEY {RENAME PARLAMENT AS INDEKS} REFERENCES STUDENTI; ciklus 5.24
a CREATE DOMAIN NAZIV_PREDMETA CHAR(30) DEFAULT??? CONSTRAINT POSTOJECI_PREDMETI CHECK ( VALUE IN ( Relacione baze podataka, Programiranje 1, Programiranje 2, Analiza 1,??? )); CREATE TABLE PREDMETI (..., NAZIV NAZIV_PREDMETA,...); a - DATE-AIDB ciklus 5.25
a Definicija kandidata za ključeve UNIQUE (lista naziva atributa) PRIMARY KEY (lista naziva atributa) NOT NULL definicija spoljašnjih ključeva FOREIGN KEY (lista naziva atributa) REFERENCES osnovna [(lista naziva atributa)] [ON DELETE referencijalna akcija] [ON UPDATE referencijalna akcija] a - DATE-AIDB ciklus 5.26
(nastavak) a Definicija ograničenja provere CHECK (uslovni izraz) create table ispit ( indeks integer not null, id_predmeta integer not null, godina_roka smallint not null, oznaka_roka char(5) not null, ocena smallint not null with default 5, datum_ispita date, bodovi smallint, primary key (indeks, id_predmeta, godina_roka, oznaka_roka), foreign key (godina_roka, oznaka_roka) references ispitni_rok, foreign key (indeks) references dosije, foreign key (id_predmeta) references predmet), check (ocena >=5 and ocena <=10)); a - DATE-AIDB ciklus 5.27
a Tvrdnja (eng. assertion) je logičke vrednost koja mora uvek da budu ispunjene Okidač (eng. trigger) je niz akcija koje su pridružene odredjenim dogadjajima, i koji se izvršavaju svaki put kada se takav dogadjaj dogodi Implementacije RSUBP ne podržavaju tvrdnje ali podržavaju okidače. a - DATE-AIDB ciklus 5.28
(nastavak) a a - DATE-AIDB CREATE ASSERTION <naziv ogranicenja> CHECK ( <logicki izraz>); DROP ASSERTIONS <naziv ogranicenja> ciklus 5.29
(nastavak) a a - DATE-AIDB CREATE TRIGGER <naziv trigera> <pre ili posle dogadjaja> <dogadjaj> ON <osnovna > [REFERENCING <lista imena>] [FOR EACH <slog ili naredba>] [WHEN (<logicki izraz>) ] <akcija>; ciklus 5.30