OK, krenucemo od pocetka. Istoveremeno cemo sacuvati podatke koje imamo, da se ne unose rucno, ili bar da ne bude mnogo rucno.
Generalno imamo resenje na dva nivoa:
prilicno komplikovano i
mnogo komplikovano. Razlog zasto se baze podataka prave komplikovanim jeste integritet podataka, citaj 'da podaci predstavljaju stvarnost sto vernije'.
Ako se ima veliko poverenje u ulazne podatke, stvari su jednostavne. Ako mozemo da garantujemo da absolutno nikada nece biti uneti duplikati ili nelogicni podaci, onda nam ne treba nista - samo kreiramo tabele, neista PK, nista validacija, nista relationships, greske su nemoguce pa se i ne ocekuju.
Integritet podataka neije isto sto i tacnost unetih podataka. Ako za vodomer unsemo novo stanje = 250 umesto 25, a staro je bilo 10, integritet je ocuvan ukoliko takav vodomer zaista postoji, jer 250>6, ali i 25>6 - novo citanje vece nego prethodno, sve je OK. Stvarni datum citanja moze bit 4. April 2019, a mi unesemo 14. April 2019, ili cak 14. April 2010, greska se nece otkriti lako ukoliko je datum prethodnog citanja 20. decembar 2018. Tu je razlika izmedju integriteta i tacnosti.
Integritet = podaci ne narusavaju ni jedno pravilo koje smo postavili.
Tacnost: integritet, plus unete vrednosti odgovaraju realnosti.
Za iustraciju ovih principa, tabela Vodomjeri u mom poslednjem postu, garantuje integritet podataka na ovaj nacin:
a1) samo vodomeri koji postoje u tabeli Vodomjer mogu imati ocitanja (relationship sa Ocitanaj na Vodomjeri)
a2) datum ocitanja mora biti veci ili jednak datumu prethodnog ocitanaj
a3) ocitana vrijednost mora biti veca ili jednaka prethodno ocitanoj
a4) jednom uneta vrednost se ne moze promeniti, niti obrisati, osim ako je to poslednje stanje
To je prvi nivo komplikacije,
prilicno komplikovano, integritet podatak je obezbedjen na solidnom nivou, a tacnost - e to je "it's up to you".
Sledeci nivo komplikacije bio bi garantovanje da:
b1) samo vodomjer koji je Posavljen moze se ocitati. Tekuci nivo ce prihvatiti ocitanja i za vodomere koji su otpisani za uvek, ili su na popravci.
b2) vodomeri se premestaju, sa mesta na mesto, tada se obicno menja i kupac, kupac moze biti aktivan i neaktivan u datom periodu. Sada,
kupac se moze zaduziti za potrosenu vodu samo ako je aktvan, i ako u datom momentu kupac duzi odredjeni vodomer.
Ako se fizicki moze garantovati da ce se uvek ocitavati samo vodomeri koji su negde postavljeni i za njih postoji kupac, prvi nivo, koji vec imamo je dovoljan.
Slucaj b1) je us stvari odgovor na pitanje "Gde je moj vodomjer, ili Koji je status vodomjera X" Statusi modgu biti na primer "U magacinu je","Na popravci je","Postavljen je","Otpisan je", ap i "Na Bazdarenju je", ako i kad bazdarenje postane rentabilno. Taj se slucaj resava na slican nacin kao sto smo resili ocitanja -pratiomo promene stanja: "Vodomer X je na dan D1 presao iz stanja Sp u stanje S", ako se dalje ne povezuje ni na koju tabelu.
U stvari, postoje dva slucaja kako se prate promene, promene stanja, i promene kontinualne velicine (citanja vodomera, balans tekuceg racuna). Ako je entitet za koji pratiomo stanja iskljucivo "Child" u "PArent-Child" relationship, ond se radi kao sto smo uradili za Vodomjere u tekucoj iteraciji, i akkao smo pokazali nekada davno na forumu (pracenje osnovnih sredstava ili tako nekako).
Ako ce pracenje promena biti necija Parent tabela, ond se menja nacin pracenja promena za Parent, ali se i Child komplikuje dodatno. Sve sto uradimo u prvom stepenu ostaje, ali se doadju nova polja za povezivanje sa Parent (koji je i sam precenje promena ).
Zbunjujuce, a? Jeste, ali se da nauciti. Pracenej promena je sablon, nije jednostavan, ali se da nauciti. Prvo se nauci prosto pracenje - ono sto se parti je child tabela i nema scoje children. Onda se nauci pracenje promena, kada je tabela i child i parent. Malo tezi sablon za ucenje, ali ipak - sablon. Kao kad inzenjeri projektuju betonske grede i ploce za stambenu kucu. Svaka se greda na isti nacin proracunava, za istu vrstu opterecenja, samo razlicite vrednosti za sile i raspone. Kad se nauci jednom, nije vise stos znati proracun, vec znati kako da se odaberu sile, pokretno ili nepokretno opterecenje, koncentrisana sila ili podeljeno, temperaturna razlika ili ne, vetar, zemljotres, pritisak vode ili zemlje. Tako i u nasem poslu, stos je videti sta na sta utice, da bi odredili nvo komplikacije (slozenosti) baze podataka.
Mi cemo da pocnemo po redu - jednostavno pracenje promena (taela koja prti promene je child tabela),
pa onda radimo slozeno pracenje, i na kraju to spojimo u jedno. A sve to na primeru vodomjera, ocitanja i mozda kupaca.
To, sutra, sad moram nesto da radim na poslu. Kapitalizam se moze podrivati iznutra do neke mere, ali ne i preko toga