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 Databases