Zatim, zar nije jako loše rešenje koristiti auto increment polja u bazi?
Ako se import radi kroz replikaciju postoje mehanizmi za sinhronizaciju kljuceva (sto je inace jos jedan razlog zasto ne koristiti ID za broj racuna). GUID to resava univerzalno ali ja npr izbegavam koriscenje GUIDa sem kad je apsolutno neophodno zbog performansi joina i svih ostalih operacija jacih od O(1). Kad poredis dva GUIDa za join poredis dva 16-bajtna bloba koji nisu prilagodjeni arhitekturi danasnjih procesora, u principu GUID kljuc ima iste performanse kao char(16) kljuc. Sa druge int kljuc je 32bita i poredjenje moze da se obavi kompletno registarski. Kad i koristim GUID to je za tabele kroz koje cetokom zivota aplikacije proci vise od 2^31 redova.
Auto increment je veoma optimizovan i skalira se lepo po svim transaction izolacijama i lock granulaciji i keygen radi direktno iz memorije servera bez potrebe za dodatnim validacijama. Zbog toga inace i nastaju rupe (ako rollbackujes transakciju ID counter se ne rollbackuje jer je sledeci kljuc mozda vec izdat drugom procesu, SQL6.5 je imao ovaj bug vracao je counter unazad na rollbacku, ali je reseno u 7.0).
Na kraju GUID nije univerzalno jedinstven, samo je statisticki veoma veoma mala sansa da se pojave duplikati.


Moja preporuka ti je da koristis SCOPE_IDENTITY() umesto @@identity. Ako neko nekad zakaci insert trigger na tvoju tabelu (npr zbog audita) i taj triger insertuje neki red negde drudge, @@identity ce se pormeniti na ID iz te druge tabele, dok ce SCOPE_IDENTITY() i dalje ostati postavljen na tvoj novi ID.
Ta opsesija nikad nije srz problema i uvek postoji bolje resenje od koriscenja rucno generisanih kljuceva u tu svrhu i ne mora se uvek ispostovati. A i ton ti nije prilagodjen kao ni opaska, bar da ne radim consulting u bankarskom sektoru pa da ti i poverujem. Serijske brojeve na cekovima ne generise banka u konkurentskom rezimu, serijske brojeve cekova generise stampar istih (u nasem slucaju zavod za izradu novcanica), banka te cekove duzi i razduzuje svojim klijentima a po vec odstampanim serijskim brojevima. Sta vise "rupe" u brojnom sistemu cekova su relativno cesta pojava (kad banka komisijski unisti ili vrati stamparu neispravno odstampane cekove pre zaduzivanja, ti brojevi se vise ne koriste i niko nece njima biti zaduzen). Ista prica vazi i za koncertne karte i za karte za voz i za skoro sve ostale sisteme, tako da nista od ovoga nema veze sa ovom raspravom.
Za fisklani racun stvarno ne znam, ali sve i da mora da bude sekvencijalan on to mora biti na nivou fiskalne kase tako da opet nemas nikakav concurrency i ne trebaju ti nikakvi lockovi. Neverovatno je koliko aplikacija funkcionise suboptimalno zbog resavanja svih problema upotrebom pesimistickog lock-a i gde mora i gde ne mora, to sto zablokiras celu firmu dok ti odsviras svoju skrpiticu to nije vazno, radi super na testiranju. Bar da je zbog necega nego zbog generisanja kljuceva i izmisljanja tople vode.
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić