Pouziti autoincrementu

Petr Vileta petr na practisoft.cz
Úterý Červen 24 00:04:57 CEST 2003


> Podle mých praktických zkušeností už tři pokladny při nasyceném provozu
> (u všech tří je fronta) bohatě stačí na to, aby řešení pomocí zamykání
> celé tabulky generovalo víc problémů než je schopno vyřešit. Je pravda,
> že jsme tehdy nepoužívali MySQL, takže zamykání celé tabulky byla jen
> taková hypotetická možnost, ale přesto jakýkoli pokus o řešení, které by
> se podobalo tomu vašemu, skončil naprostým nezdarem. Jediná funkční
> varianta byla ta, kterou jsem popsal výše.
Ja jsem zamykani celych tabulek (respektive jedne) pouzil pro realtime
skladove hospodarstvi, fakturaci a jedn.ucetnictvi pro 3 pokladny a PC sefa
fe Foxpro for DOS na Lantasticu a nikdy k zadne kolizi nedoslo. Tedy doslo,
ale ja to mel osetrene tak, ze se pokladni ukazalo ceske okno, kde bylo,
"Prideluje se cislo faktury na jine pokladne, pockej 5 sekund" a vetsinou to
ani nestacila precist, protoze se to odemklo drive.
>
> > zvolim neco slozitejsiho a pohodlnejsiho, treba Mercedes. Takze pro male
> > aplikace klidne zamykam tabulky na nezbytne nutnou dobu a mam naprosto
> > prehledna data, ktera dokazu v pripade nutnosti opravit i z prikazove
radky
> > a bez papiru plneho poznamek typu "Faktura 10/2003 ma ID=132009876500"
:-)
>
> Používám dva různé klíče a takový papír jsem nikdy nepotřeboval. Je-li
> číslo faktury jednoznačné, není snad takový problém vyhledávat podle něj.
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.
V praxi se stavaji i takove pripady, kdy prodavac A napise 10 polozek
faktury na pokladne 1, pak pro neco odejde do skladu, ale vrati se omylem k
pokladne 2 a tam pokracuje v rozepsane fakture, protoze tam zakaznik take
presel. Jenze ona ta faktura neni jeho, ale prodavace B pro uplne jineho
zakaznika :-) Teprve po uzavreni a vytisteni se zakaznik ozve a oni
potrebuji z faktury 20 prevest poslednich 5 polozek na fakturu 19 a obe
znovu vytisknout. Samozrejme spravny ucetni postup je udelat dve storna a
napsat to spravne, jenze to znamena zapsat ty polozky pro obe faktury znovu
s minusem a jeste jednou (tebntokrat spravne) s plusem. A kdyz na kazde
fakture je 50 polozek, tak je jednodussi zavolat nekoho "od pocitacu" a on
to behem par sekund rucne prevede primo v databazi.
--
Petr




Další informace o konferenci Databases