Pouziti autoincrementu

Michal Kubecek mike na mk-sys.cz
Úterý Červen 24 11:43:42 CEST 2003


On Tue, Jun 24, 2003 at 12:04:57AM +0200, Petr Vileta wrote:

> Jenze proc mit v tabulce "polozky_faktury" pouzity unikatni klic z tabulky
> "faktury" (autoincrement ID), kdyz ho tam nepotrebuju, nebo naopak, proc tam
> davat cislo faktury, kdyz tam muzu dat ID faktury? Davat do polozek oba
> udaje je nesmyslen plytvani mistem a strojovym casem. Bud je identifikatorem
> faktury z programatorskeho hlediska bigint(32) a ucetnicke cislo je pouhy
> atribut, pak je zbytecne ucetnicke cislo faktury ukladat do polozek, ale
> pouziju tam stejny identifikator, jenze nebude unikatni. Jenze pak se
> dostavam k tomu, ze polozky s ID=1234567890 patri k zahlavi se stejnou
> identifikaci, ale ja nevidim co to je za fakturu a musim delat kvuli tomu
> select, abych to zjistil.

Důvod je jednoduchý a už jsem ho tu popsal. Je to proto, že primární klíč
potřebujete hned, jakmile se pokuslíte provést insert do tabulky. Pak je
ale ještě strašně moc prostoru, kde to může neprojít. Mezitím mohou být
"vydána" další ID a pokud nakonec provedete rollback (nebo něco, co tomu
odpovídá, nepoužíváte-li transakce), vznikne vám díra. Neexistuje způsob,
který by tomu spolehlivě zabránil. Potřebujete-li tedy souvislou řadu
hodnot identifikátorů, nelze je použít jako primární klíč (nemáte-li tedy
striktně jednoklientské prostředí).

                                                           Michal Kubeček


Další informace o konferenci Test