[ Kusur @ 22.07.2003. 04:40 ] @
Pozdrav svima


Da li neko može da mi odgovori na ovo pitanje:

U tabeli (MySql baza) postoji polje tipa "timestamp" i u tu tabelu korisnici upisuju neke podatke.
Da li može da se desi da dva ili više korisnika imaju isti "timestamp" ako u isto vreme posalju te podatke u bazu?

To jest, da li je brisanje redova na osnovu "timestamp-a" pouzdano?

Unapred hvala
[ tOwk @ 22.07.2003. 12:37 ] @
Zavisi od implementacije same baze (tj. u ovom slučaju MySql-a). Sumnjam da neko ovde zna te tehničke detalje (u kom trenutku se dodeljuje vrednost automatskom timestamp-u), tj. detalje implementacije („implementation detail“).

U svakom slučaju, i da ne mogu biti isti, ne valja se pouzdati na tome, i to je suštinska greška u dizajnu baze. Izaberi nešto drugo kao ključ sa kojim ćeš da radiš.

U kvalitetnoj i ozbiljnoj bazi ja bih sigurno očekivao da timestamp može biti isti, ali za MySql to ne mora da znači. :-)
[ byTer @ 22.07.2003. 15:44 ] @
Tu je bitna verovatnoca, ukoliko mnogo ljudi pristupa bazi, onda moze da se desi da se u isto vreme upisu podaci u bazu. Ako ne sme da bude isto vreme pokusaj da zakljucas bazu za unos uneses, pa onda je otljucas...
[ broker @ 22.07.2003. 15:51 ] @
Timestamp ti nikako ne valja kao kljuc tabele jer se menja sa svakom promenom u slogu. Uvedi Id polje koje ce biti Integer autoincrement i onda ce svaki slog imati jedinstvenu vrednost u tom polju. Tu vrednsot sa sigurnoscu mozes koristiti kao jedinstvenu.
[ Kusur @ 22.07.2003. 21:24 ] @
Citat:
byTer:
Tu je bitna verovatnoca, ukoliko mnogo ljudi pristupa bazi, onda moze da se desi da se u isto vreme upisu podaci u bazu. Ako ne sme da bude isto vreme pokusaj da zakljucas bazu za unos uneses, pa onda je otljucas...



Na koji način se vrši zaključavanje i otključavanje i šta če se desiti ako neko pokuša da upiše podatke u trenutku kada je baza zaključana?

U ovom slučaju radi se o naručivanju - to jest jedan korisnik naruči dve-tri knjige i sve njegove narudžbine imaju isti "timestamp". (Nema više ažuriranja). Ako želi ponovo nakon 2-3 minuta da naruči još nešto, nove narudžbine imaju drugi "timestamp" ali je korisnik isti (tj. to je već druga narudžbina).


Pozdrav
[ byTer @ 23.07.2003. 03:06 ] @
Ako je pitanje samo u narucivanju zasto ne pustis da imaju vise korisnika sa istim time stampom? Ne menja na stvari. Cak i da koristis timestamp kao polje za sortiranje, soritirace se po jednom kriterijumu ako je to polje isto.

A sto se tice zakljucavanja... u ASPu je application.lock i ako neko pokusa da tada upisuje u bazu, javlja mu gresku u bazi. Stim sto ti moze s to da odradis sa exception pa da kazes da je baza prenabudzena i link da proba opet ponovo. Mada mislim da se to moze desiti 1 u 10000000 pokusaja (valjda je ovo milion)
[ mikis @ 23.07.2003. 13:25 ] @
Ne bih ja u tu svrhu koristio timestamp. Prvo, više korisnika može da ima isti timestamp, a drugo, isti korisnik može imati više timestamp-ova. Bolje uvedi novo polje, npr. order_id pa na osnovu njega vrši brisanje.
[ byTer @ 23.07.2003. 16:46 ] @
A ti to hoces da brises?

Kada vec uneses neki order i onda hoces da ga izbrises u istom sessionu?

Uradi kako ti je rekao mikisi. Samo sto ces uraditi ovako. Kad korisnik naruci sve sto je hteo onda ga sprovedi na stranicu gde su sve njegove porudzbine (kao shopping cart) a zatim odatle po order_id polju mozes bez brige da obrises ono sto ti treba. Sve ostalo moze da bude rizicno i da ti unistava bazu!