Pouziti autoincrementu

Michal Kubecek mike na mk-sys.cz
Neděle Červen 22 20:39:12 CEST 2003


On Sat, Jun 21, 2003 at 01:27:31AM +0200, Petr Vileta wrote:

> Mno :-) Ono u faktury je jeji cislo totiz ten nejdulezitejsi udaj a pouziva
> a zobrazuje se uplne vsude. Proto mi prijde neprakticke zavadet nejake dalsi
> cislovani (ID), kdyz rok vydani faktury a jeji cislo potrebuji vzdycky.

Celá ta vaše představa o souvislé nepřerušované posloupnost je v praxi
nerealizovatelná, jakmile potřebujete více současně pracujících klientů
(a to je skoro vždy). Vzhledem k různým možnostem souběhů více požadavků
nelze udržet současně jednoznačnost klíče a nepřerušovanost řady jeho
hodnot.

V případě primárního klíče je základním požadavkem jeho jednoznačnost,
té je podřízeno všechno ostatní. Aby ji bylo možné zaručit, jsou
mechanismy autoinkrementace (nebo jejich analogie - třeba generátory
u Firebird/InterBase) postaveny mimo transakce. Protože vytvoření
nového záznamu je komplexní operace, musí se počítat s tím, že může
selhat a že mezitím bylo vytvořeno několik jiných. Tím vznikne díra
a nelze se tomu spolehlivě bránit. Potřebujete-li souvislou řadu hodnot
klíče, musíte si vytvořit druhý klíč, který vyplňujete až úplně nakonec,
v rámci co nejkratší transakce, která má dostatečnou úroveň izolace
(selže-li, opakujete pokus znovu).

                                                        Michal Kubeček


Další informace o konferenci Databases