OK, da pocnemo onda. Prvo cemo navesti pravila:
Prati se promena stanja registratora. Sta je promena stanja? Pa, moze se reci da je u nekom trenutku t
1 objekat us tanju S
1 i da u trenutku t
2 objekat prelazi u stanje t
2. To je promena - u nekom trenutko objekat posmatranja prelazi iz jednog stanja u neko drugo stanje. U slucaju nasih registratora, to bi se moglo opisati ovako nekako:
Registrator BrojRegistratora = '12-007/36' u trenutku '12 Januar 2014 11:45AM' je presao iz prethodnog stanja 'na polici' u stanje 'izdato'.
Registrator BrojRegistratora = '12-007/36' u trenutku '16 Januar 2014 13:45AM' je presao iz stanja 'izdato' u stanje 'na polici'.
Registrator BrojRegistratora = '12-007/36' u trenutku '26 Januar 2014 13:45AM' je presao iz stanja 'na polici' u stanje 'arhivirano'.
Registrator BrojRegistratora = '12-007/36' u trenutku '02 Februar2014 13:45AM' je presao iz stanja 'arhivirano' u stanje 'na polici'.
Registrator BrojRegistratora = '12-007/36' u trenutku '03 Februar2014 11:45AM' je presao iz stanja 'na polici' u stanje 'izdato'.
Recenice koje smo navelu su logicki iskazi, tacni - izjave o promenama stanja registratora kroz vreme. Iskazi se mogu generalizovati u logicki predikat, tako sto se umesto konkretnih vrednosti navedu parametri:
Code:
P = Registrator [BrojRegistratora] u trenutku [TrenutakPrelaza] prelazi iz stanja [PrethodnoStanje] u novo stanje [NovoStanje].
Ova recenica se zove predikat relacije koja ce da prati promene stanja registratora. Relacije se predstavljaju tabelama cije zaglavlje je odredjeno predikatom relacije, a telo cine tacni iskazi izvedeni iz predikata. U nasem slucaju bilo bi to ovako:
Code:
Predikat:
---------
P = Registrator [BrojRegistratora] u trenutku [TrenutakPrelaza] prelazi iz stanja [PrethodnoStanje] u novo stanje [NovoStanje].
Zaglavlje koja predstavlja relaciju - skup parametara predikata: {[BrojRegistratora],[TrenutakPrelaza], [PrethodnoStanje],[NovoStanje]
Ovo su izkaxi koji odgovaraju postavljenom predikatu:
Registrator BrojRegistratora = '12-007/36' u trenutku '12 Januar 2014 11:45AM' je presao iz prethodnog stanja 'na polici' u stanje 'izdato'.
Registrator BrojRegistratora = '12-007/36' u trenutku '16 Januar 2014 13:45AM' je presao iz stanja 'izdato' u stanje 'na polici'.
Registrator BrojRegistratora = '12-007/36' u trenutku '26 Januar 2014 13:45AM' je presao iz stanja 'na polici' u stanje 'arhivirano'.
Registrator BrojRegistratora = '12-007/36' u trenutku '02 Februar2014 13:45AM' je presao iz stanja 'arhivirano' u stanje 'na polici'.
Registrator BrojRegistratora = '12-007/36' u trenutku '03 Februar2014 11:45AM' je presao iz stanja 'na polici' u stanje 'izdato'.
Tabela koja predstavlja relacije za nas predikat, izgleda ovako:
[BrojRegistratora] [TrenutakPrelaza] [PrethodnoStanje] [NovoStanje]
-------------------------------------------------------------------------------
'12-007/36' '12 Januar 2014 11:45AM' 'na polici' 'izdato'
'12-007/36' '16 Januar 2014 13:45AM' 'izdato' 'na polici'
'12-007/36' '26 Januar 2014 13:45AM' 'na polici' 'arhivirano'
'12-007/36' '02 Februar2014 13:45AM' 'arhivirano' 'na polici'
'12-007/36' '03 Februar2014 11:45AM' 'na polici' 'izdato'
Dobro pogledajte ovu tabelu. Jedna tabela, a pokriva sva stanja, i cuva trenutke promene stanja. I vsaki objekat je u nekom trenutku u tacno jednom stanju. Tabela je ista, bez obzira o kakvom se objektu radi - registrator, knjiga, rent-a-car auto, zaduzena oprema i slicno. Ovo je samo kako bi tabela mogla da izgleda. DA bi kompletirali dizajn, moramo da postavimo i neka ogranicenja. Na primer, sta bi bio Primary key? Koji su candidate keys? Odakle dolaze vrednosti [BrojRegistratora]? Odakle dolaze vrednosti za stanja? Vrednosti za TrenutakPrelaza su rastuce - svako novo stanje ima veci datum TrenutakPrelaza od prethodnog. Razmislite o ovim stvarima. Vidite li jos neka ogranicenja koja bi trebalo postaviti?
Napravit prvu verziju tabele, prema datoj slici. Nemojte da dodajete autonumber. Postavite UNIQUE indexe za svaki candidate key koji mozete da smislite. Unseite nesto podataka, za nekoliko registratora. Za vezbu, napravite kvarije kojo daju odgovor na pitanja:
1) Za zadati objekat i zadati datum, prikazati stanje objekta na taj datum
2) Prkazati polednje (tekuce, trenutno stanje) svih objekata
3) Koji su objekti u stanju 'na polici' u ovom trenutku?
4) koji su objekti u stanju 'izdat' u ovom trenutku?
5) Koji su objekti bili u stanju 'izdato' na pocetku meseca?
6) koliko puta je zadati objekat bio u stanju 'izdato'
7) koliko vremena prodje od momenta izdavanja objekta do vracanja?
Sutra cemo da nastavimo. Ovo je samo kostur tabele, dodacmo jos kolona, da bismo obezbedili postovanje ogranicenja. Dodacemi i neke korisne kolone - ako je objekat izadt, kome je izdat? Ako je objekat na polici, na kojoj je polici (ukoliko moze biti na raznim policama)? Za sve ovo trebaju nam dodatne kolone i dodatna ogranicenja. Polako, igrajte se malo postavljenom tabelom i pokusajte da napravite kverije. Sutra cemo da nastavimo, ili z akoji dan ako sutra nismo spremni. Ovo sto smo ispricali zahteva vise od jednog popodneva da se dobro razume, a kveriji zahtevaju jos vise vremena...
:-)