Odavno je bilo, napravio sam varijantu resenja pre mesec dana, ali nikako da postavim na forum.
U primeru se vidi kakao se prati vazenje vozackih dozvola i registracije vozila. Pracenje vozila, gde je, ko ga duzi, je u tabeli PracenjeVozila. Uz standardne promene stanja imamo i nesto sto dosad nismo imali: uslove da ako je vozilo 'Na Putu' onda u tom momentu mora da vazi vozacka dozvola vozaca ali i da je vozilo registrovano. Za ostale situacije, vozac, broj dozvole, datumi registracije i vazenja dozvole nisu obavezni, ali ni zabranjeni.
Ovo je validation rule na nivou tabele "PracenjeVozila":
Code:
([RB]=1 Imp [StariRB]=1 And [IZStanja]=[Ustanje] And [DatumStanja]=[DatumStarogStanja])
And ([RB]>1 Imp ([StariRB]=[Rb]-1 And [DatumStanja]>=[DatumSTarogStanja]))
And ([UStanje]='Na putu' Imp Not ([Vozac] Is Null Or [VOZ_VaziOD] Is Null Or [VOZ_VAziDo] Is Null)
And [DatumStanja] Between [VOZ_VaziOD] And [VOZ_VAziDo]
And [DatumStanja] Between [REG_VAziOd] And [REG_VAziDo])
Verujem da ce Nenad ovo moci da razume i raspetlj, te da pokusa neki interfejs da napravi. Korisnik ne bi trebao da vidi ni jedno od onih polja koje citaju vrednosti iz prethodnog reda. To smo ptravili ranije, u nekoj slicnoj temi.
Za neupuceno oko, tabela PracenjeVozila izgleda totalno nenormalizovano, sa mnogo podataka koji se prenose iz drugih tabela, naoko bespotrebno. To se samo tako cini, jer je sve kontrolisano upotrebom FOREIGN KEY, to jest Access Relationships. Tabele su prvo dovedene u Boyce-Codd NF (3+) pa smo onda dodavali kolone iz drugih tabela da bi uspostavili dodatna ogranicenja. Ako kazemo "Vozac ne sme da podje na put ako mu tada ne vazi dozvola" onda je jasno da tabele PracenjeVozila mora dnekako da "vidi" da li vazi vozacka dozvola. Da bi to postigli, relationship ne povezuje samo kolone Vozac, nego i kolone VaziOd i VaziDo iz tabele VazenjeVozackeDozvole. U VazenjeVozackeDozvole nismo stavili za koji tip vozila dozvola vazi
Za sada toliko, pa kad stignem da se javim sledeci put.
:-)