Prvo sto je receno, jeste da razdvojis bilo sta sto mozes nazvati BROJ DOKUMENTA (kakav god dokument bio) i IDENTITY property samog PK. Naime, doci ces mozda u priliku da menjas dizajn baze, ili ce ti se pojaviti (ovo je vrlo tipicno!) dve vrste dokumenata koji idu u istu tabelu i svaki od njih bi trebao imati nezavisan broj dokumenta (npr fakture i ponude ... jako je lose, ako imas fakturu 1,2, 3 pa ponudu 4, pa fakturu 5, 6 ....; umesto toga treba da imas fakturu 1,2,3, pa ponudu 1, pa fakturu 4,5...)
Da bi ovo postigao, treba u posebnoj tabeli, tabeli brojaca (VRRRRLO osetljivoj - konkurentni pristup njoj moras obezbediti adekvatnim zakljucavanjem - to je isto gore receno) da odrzavas brojace - prilikom dizajniranja, treba da vidis od cega moze zavisiti jedan takav broj dokumenta (u ovom gore, jednostavnom slucaju, zavisi samo od tipa dokumenta), pa ces odrzavati vise brojaca i uvek upitom zahvatati onaj koji ti treba prilikom pravljenja dokumenta. Kad uzmes odgovarajuci broj, naredni (u tabeli brojaca) moras inkrementirati. Jednostavna tabela brojaca za gornji primer sada izgleda ovako
create table TestBrojac (
TipDokumenta char(10),
Broj int
)
sa sadrzajem:
TipDokumenta Broj
-----------------------
faktura 6
ponuda 2
(necu sad da ulazim da mozes (moras!) imati sifarnik tipova dokumenata, pa nece u tabeli pisati "faktura" ili "ponuda", vec neki broj...;polje TipDokumenta stavis da bude PK)
Ovde sam naveo slucaj gde je u TestBrojac smesten NAREDNI BROJ, sto znaci da ces ovaj broj usvojiti za naredni dokument, a zatim inkrementiranjem spremiti brojac za naredni dokument.
Na ovaj nacin imas vecu kontrolu nad brojacima, u slucaju neke brlje mozes ih lakse modifikovati/ispraviti gresku, a pritom ne diras identity polje, koje pustis da slobodno "puca" i koje ce ti biti PK.
Nad dvojkom tipdokumenta/brojdokumenta stavis unique index i to je to (ne u ovoj tabeli, vec u tabeli samih dokumenata).
U slucaju naknadnog dodavanja nove vrste, tj, tipa dokumenta dovoljno je samo da u tabelu brojaca stavis novi brojac, koji moze da krene od 1 (ili nekog opsega, kako zelis/volis/moras) a program nastavlja da radi.
Tipicno je da imas vise tabela u kojima odrzavas brojace koji nemaju veze jedni sa drugima. Naime, neki brojaci zavise od tipa dokumenta (kao ovaj gore), a neki od fizicke lokacije, organizacione strukture, coveka (zaposlenog) i slicno. Ne treba to da izbegavas, samo napravi dobru politiku pristupa i ispostuj je svuda.
Uhvatili ste me nespremnog