Autor Zpráva
srigi
Profil
Hi coders, potreboval by som nasledujucu funkcionalitu:

aplikacia sluzi na ukladanie dokumentov podobnych fakture, kazdy jednotlivy dokument bude mat v DB jedinecne ID.

- po zobrazeni formulara na vyplnenie sa vygeneruje nove (unikatne) ID
- ak sa medzi tym prihlasi iny uzivatel a zobrazi si rovnaky formular, vygeneruje sa dalsie unikatne ID
- a to aj v pripade, ze prvy uzivatel este svoj form neodoslal !!!
- ak uzivatel form neodosle (klikne na inu stranku v ramci aplikacie) vygenerovane ID sa "nezahodi" pre buducnost, ale bude ho mozne v buducnosti pouzit

Rozmyslal som, ze to je mozne urobit asi takto (este som to nestihol nakodit, tak pls napiste mi svoje postrehy):

- user si zobrazi form - aplikacia si pomocou TABLE STATUS zisti nove cislo ktore pripadne pre AUTO_INCREMENT stlpec (prvy stlpec je standart `id` PRIMARY KEY AUTO_INCREMENT)
- podla tohoto sa vygeneruje nove ID cislo dokumentu podla nejakeho jednoducheho algorytmu, napr. ak zisti, ze nove auto_inc cislo bude 513, aplikacia spocita ID dokumentu 2006000513
- toto cislo sa zapise do noveho riadku v tabulke spolu s casom (timestamp, BTW ako ukladate timestamp, aky datovy typ?)
- spolu s tymto sa zapise este napr. ROW_STATUS (1 - row-used, 2 - row-locked), zapisem 1
- ak sa prihlasi novy user, pri zobrazeni formu sa checkne ci existuje nejaky riadok s ROW_STATUS = 1
- ak ano, checkne sa ci timestamp tohoto riadku je uz po timelimite (zvolim si timelimit 600 sekund, na odoslanie formu, inak ID prepadne pre buducnost)
- ak riadku este nevyprsal timelimit, aplikacia generuje nove ID dokumentu a zapise novy riadok
- ak riadku timelimit vyprsal, zapise sa novy timestamp
- po odoslani formu sa do ROW_STATUS zapise 2

Je to dobre?
venca12
Profil
Člověče, velká machinace pro nic. Jednoduše genruj to id až po uložení dokumentu. Zřejmě to celé děláš pro to, aby uživatel viděl, pod jakým číslem bude jeho záznam uložený.

Pokud to chápu správně, tak uživatel číslo 1 si rezervuje číslo dokumentu, třeba 1. Uživatel číslo 2 přijde, zjistí si, zda si může podle autoincrement sebrat číslo 1, uvidí, že ho má uživatel 1 rezervované a timestamp ještě nevypršel, tak dostane číslo 2. Ok pracuje a uloží pod číslem 2. Uživatel zatím korektně chce uložit záznam s číslem jedna, ale spadne mu komp díky nestabilitě distribuční sítě ČEZu. Pustěj mu elektriku až za 601 vteřin. Záznam 1 propadl, to ale nevadí, protože je tu záznam 2 a autoincremet vrací hodnotu číslo 3. Takže uživatelův záznam 1 je v pytli (zůstala po něm černá díra) a uživatel 1 musí vytvořit záznam číslo tři.

Takže tam budeš mít místo jedničky díru.

Myslím, že se na to vyflákni.

Když použiju analogii s těmi fakturami, tak ty by jsi chtěl rezervovat číslo faktury už, když je ještě celá zakázka v pozici úvah. Třeba rok, před skutečným vydáním faktury (jo je to přehnaný, ale myslím, že to dostatečně reprezentuje absurdnost situace).

Dle mého názoru, by mělo být číslo záznamu známo až v okamžiku jeho vzniku, protože dokud není záznam, nemůže mít ani žádné číslo.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0