@disturbed
Guid moze da ima kolizuju, ali isto tako ovo resenje moze da ima identican problem, cim ti nisi na neki nacin stavio unique constrain.
Sta ako imas bug bilo sa generatorom id-a na serveru ili u lokalu (ili sa kasom i slicno) i izdas n racuna sa istim PFR brojem? I dalje moras imati mehanizam da mozes da popravis to. Racun mora, pa mora da prodje kroz sistem.
Sjecam se vremena kad sam se borio sa ludacima koji su htjeli gapless autoincrement idjeve
Da bi izgledalo lepo

ili da bi postojao nacin za prev/next entitet?
Super je problem.
Trebalo mi je prev/next za Event Sourcing.
Ideja mi je bila da kad kreiram novi entitet ubacim u njega pored Guid Id-a, i IdNext i IdPrev, gde bi IdPrev bio null, a IdNext jos jedan generisan guid. I onda kad ubacujem sledeci entitet u red, da ubacim da Id bude IdPrev iz prethnodnog, IdNext da bude novi. Kad vadis IdNext koji ne postoji da to tretiras kao tumbstone.
E sad, posto je Event Sourcing i posto sansa za koliziju je po entitetu, a ne po celoj bazi, i posto u slucaju sa kojim sam radio, to je bila mala sansa mislim da je bilo dovoljno dobro. Ali, na kraju nisam hteo da komplikujem, koristio sam samo timestamp

i izvlacio sve state-ove po Id-u.
Za sistem sa puno redova, gde ima vise sudaranja i paralelnih procesa, mislim da bi mogla jedna tabela da se samo ubacuju, bez da znas prev/next i da posle postoji proces, kad smo sigurni da je sve zavrseno od transakcija i ostalog, koji ce u drugu tabelu (ili eventualno update), u odnosu na timestamp da napravi prev/next i da vadis sve sa join-om (ili kako vec)
A bas gapless autoincrement - pa mislim da bi moglo u teoriji

Penal bi bio ogroman, cak i za single server, posto bi paralelizam bio limitiran na transakcije koje nemaju dodirne tacke u vidu tabela.
E sad da li bi mogao da odradis prelocate prvih n redova, tako sto ces rucno ubaciti samo id redom i nista vise u klasicnu (ACID) bazu, i onda na nivou softvera trazis prvo "lowest null" i da kad krenes da upisujes da se lockuje tabela. Ako krenes paralelno ako postoji Optimistic Concurrency Control - i pukne upit, odradis retry na nivou software-a? Nisam bas siguran da ce ovo da radi? Penal bi isto velik, mada ne koliko bez paralelizma, ali ne bi bio garantovan order, posto ti transakcija i dalje moze puci.