Pouziti autoincrementu

Kotala Zdeněk Zdenek.Kotala na Mius.cz
Čtvrtek Červen 19 08:11:34 CEST 2003



> -----Original Message-----
> From: Petr Vileta [mailto:petr na practisoft.cz] 
> Sent: Thursday, June 19, 2003 3:28 AM
> To: databases na linux.cz
> Subject: Re: Pouziti autoincrementu
> 
> > > rozlozite casove, tak ono to ani jinak provest nejde, 
> pokud nechcete mit
> v
> > > tom ID "diry", tedy diskontinuitu. Jsem na tohle zvykly 
> uz od dob sitove
> >
> > Aha, pak ale resite uplne jiny problem. A je otazka, jestli vubec ma
> > cenu ho resit (na ty typicke veci, kdy to lidi chteji, jako 
> faktury a
> > tak, jsou jine a efektivnejsi postupy).
> No ja tedy nevim, ale kdyz navrhnu tabulku, kam se mi pod  unikatnim ID ma
> zapsat rekneme 10000 zaznamu, ale je velka pravdepodobnost, ze nektere
> zaznamy budou opet zruseny, tak to abych to ID dimenzoval na 
> mediumint nebo jeste vetsi, protoze autoincrement nezjistuje skutecnou 
> maximalni ulozenou hodnotu, ale pocita porad dal. Navic nevim proc, ale ja
proste nechci mit diry v 
> posloupnosti z principu. Predstavte si databazi osob s osobnimi cisly,
ktera vypada po nekolika
> mesicich takto:
> 1        Novak
> 24      Vileta
> 286    Sverak
> 1238  Hardaba
> 1326  Novotny
> Vas by netrefil slak, kdyz budete mit ID typu mediumint, ale 
> v tabulce nikdy
> nebude vic, nez treba 100 jmen? :-)

Toto se bezne deje, nebot pouzite cislo zamestanance, ktery jiz ukoncil
pracovni pomer
nemuzete okamzite pouzit, kvuli navaznosti na mzdovou agendu, navic ani
nemuzete 
ty cisla menit. (aspon vsechny mzdove agendy jsem takhle videl pracovat)

> Pro te prilezitosti me napadlo, ze by MySQL a databaze obecne mohly
> obsahovat funkci FIRST_FREE(), ktera by vratila z pole ID 
> prvni neobsazene
> cislo, v uvedenem prikladu tedy 2 :-)
 
To je k nicemu. Neni jednoduse mozne zajistit souvislou radu napriklad v
konkurencnim 
prostredi. V pripade, ze bezi dve transakce ta prvni dostane id=5 a druha
id=6 
a nyni prvni transakci rollbacknu, tak neni mozne presvedcit tu druhou
transakci
aby najednou zmenilo id na 5. 

Je si treba uvedomit ze autoincremet, sekvence nebo generatory slouzi pro
generovani
jednoznacneho klice vhodneho pro ruzne technicke vazby mezi tabulkami a
uzivatel vetsinou
toto cislo ani nevidi.


Zdenek K.



 


Další informace o konferenci Databases