Pouziti autoincrementu

Honza Pazdziora adelton na informatics.muni.cz
Čtvrtek Červen 19 12:01:14 CEST 2003


On Thu, Jun 19, 2003 at 03:28:23AM +0200, Petr Vileta wrote:

> 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

No a? Toto nepredstavuje zadny problem. Stejne ta zrusena cisla
nemuzete znova pouzit.

> Navic nevim proc, ale ja proste nechci mit diry v posloupnosti z principu.

Mate spatne principy. Vazne.

> Vas by netrefil slak, kdyz budete mit ID typu mediumint, ale v tabulce nikdy
> nebude vic, nez treba 100 jmen? :-)

Ne. Presne takhle mi to funguje.

> 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 :-)

Asi rok zpet sly v teto konferenci dva nebo tri selecty, kterymi to
v ruznych databazech najdete. Google news by mely pomoct.

> > Ale rozhodne v zakone neni, ze mate pro zalozeni noveho ucetniho dokladu
> > globalne zamknout celou tabulku.
> No to tam neni, ale navrhnete tedy nejaky postup, ktery mi zajisti, ze
> dalsimu zaznamu pridelim NAVAZUJICI cislo a toto cislo se mi zaroven vrati
> do aplikace (programu) abych ho mohl dale pouzivat. Jedna se mi o to, ze

Tabulka s "predvydanymi" cisly dokladu, a s druhym sloupcem, ktery
	muze byt null, a do ktereho se budou sazet interni FK dokladu.
Vytvoreni zaznamu s internim primarnim klicem v tabulce dokladu. Toto
	je to cislo, tkere budete pouzivat ve vsech ostatnich
	tabulkach jako FK.
Update na te tabulce s predvydanymi cisly tak, ze se vezme nejmensi
	a do toho druheho sloupce se da ten interni identifikator
	dokladu.
Radost nad tim, ze to vsechno funguje ve dvou krocich, bez zamykani
	tabulek, s vysokou propustnosti, dokonce tak, ze doklad muze
	byt vytvoren a poslan k pripominkovani a schvalovani, tedy
	existovat, a nemit zadne cislo dokladu, dokud neni
	zfinalizovan.

> napriklad pridelim cislo fakture, to musi navazovat na predchozi radu bez
> vynechani. Jenze toto cislo (ID) zaroven pouziju take v dalsich tabulkach,
> napriklad pro ocislovani v knize pohledavek (pohledavka ma stejne cislo jako
> faktura a nekdy delam podle nej join), pak v nejakem vykazu pro vedouciho
> skladu, kde do seznamu dodacich listu (maji sve ID) doplnim cislo (ID)
> faktury, ktera se k dodaku vaze.

Tohle je spatne. V jinych tabulkach nemate co pouzivat externi cislo
faktury (to, co je na ni natistene), protoze to cislo je
prachobycenych atribut te faktury podobne jako datum splatnosti, ale
mate tam pouzivat interni integerovy primarni klic.

> Nebo jiny priklad:
> Delam seznam firem. Kazda firma dostane sve ID (bezne je to ICO, ale nekdy
> to nejde).

Je spatne, pokud tam cpete ICO. Davejte tam cisla generovana sekvenci
nebo auto_incrementem. Zakaznik ICO vubec nemusi mit. ICO se muze
zmenit.

> Jenze kazda firma ma take spolecniky, jednatele, zamestnance a o kazde z
> techto skupin osob se vedou jine udaje, takze maji samostatne tabulky.
> Jedina cesta, jak svazat tyto lidi s konkretni firmou je, ze kazda osoba
> bude mit v zaznamu i ID firmy. Takze zapisu novou firmu a potrebuji pridelit
> nove ID, ale to potrebuju i znat a pouzit v jinych tabulkach.
> Uz jsem videl hodne ruznych reseni, ale to moje mi zatim vychazi
> nejbezpecnejsi a take nejrychlejsi na zpracovani, ackoliv to na prvni pohled
> vychazi opacne.
> No schvalne, jak to resite vy?

Striktnim rozlisenim toho, co je databazovy primarni klic, a na ten
jak uz jsme byli psali existuji (byt neprenositelne) nastroje, ktere
jsou to nejlepsi, co databaze muze poskytnout. A pak atributy tech
zaznamu, jako je cislo faktury, ICO, rodne cislo, atp.

-- 
------------------------------------------------------------------------
 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