Pouziti autoincrementu
Honza Pazdziora
adelton na informatics.muni.cz
Pondělí Červen 16 16:55:44 CEST 2003
On Mon, Jun 16, 2003 at 04:40:09PM +0200, Kouba Tomas wrote:
>
> Mam nekolik problemu z nich jeden co me pali je pouziti pole s tzv.
> autoincrementem (automaticke cislovani pole). Bohuzel je tato vlastnost a
> jeji definice pri zakladani a update tabulky velmi zavisla na druhu
> databaze. Nevim jaka je z toho cesta: na autoincrement se vykaslat (je tezke
> ho necim nahradit) nebo co?
Problem neni s autoincrementem jako takovym, protoze to je standardni
prostredek nekterych databazi na transakcne ciste generovani
primarnich klicu, coz je fajn, rozhodne je lepsi pouzit autoincrement
nez nejakou posloupnost typu
select max(id) + 1 into newid from tabulka;
insert into tabulka values (:newid, 'Tjada', 'Dada');
-- oops, primary key violated, protoze totez provedla
-- paralelne bezici transakce, no dobre, zkusime
:newid := :newid + 1;
insert into tabulka values (:newid, 'Tjada', 'Dada');
-- oops, zase
:newid := :newid + 1;
insert into tabulka values (:newid, 'Tjada', 'Dada');
-- hura, tentokrat se povedlo, ale priste bychom mohli cyklit
-- jeste dlouho
Cili autoincrement pouzivejte, kde to jde.
Problem je v tom, ze ani u tech databazi, ktere autoincrement
podporuji, nemate standardni zpusob, jak dostat to nove pridelene
cislo zpet do aplikace. A samozrejme, pak jsou databazove systemy,
ktere nemaji autoincrementy, ale maji sekvence, kde je ta logika uplne
opracena: nejdriv ziskam nove cislo ze sekvence, pak vytvarim (nebo
nevytvarim, stat se muze cokoli) novy zaznam v tabulce.
Z toho duvodu mi prijde nejjednodussi nehrat si na stoprocentni
prenositelnost. Ma cenu vytvorit si na to metodu, ktera ten novy
zaznam vytvori a vrati nove pridelene id, a v te metode rozlisit (nebo
to nejak podedit, zavisi na chuti kazdeho vyvojare), nad jakym
systemem se aktualne bezi a provest prislusne databazove kroky.
Dalsi moznost je a la XP to neresit ted, napsat to tak, aby to
vyhovovalo aktualne pouzivane databazi a tu generalizaci provest
az za ctyri roky, az to zacne byt potreba. Ma to tu vyhodu, ze
pokud ten projekt zkrachuje, tak se to nebude muset delat nikdy. :-)
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
Only self-confident people can be simple.
Další informace o konferenci Test