Tema: Re: unikalus įrašo numeris
Autorius: Ernikas
Data: 2010-11-23 15:30:29
o GUID nepadetu?

Ernikas

"Anon" <anon@pisem.net> wrote in message 
news:icg792$uv3$1@trimpas.omnitel.net...
> Ačiū dar kartą visiems, patarimus išklausiau, o dabar išbandysiu savo 
> variantą, jei nepasiseks - pakeisiu pagal tuos patarimus :) Aišku, 
> užlokinimas ilgam laikui negerai, bet kiek žinau, jei Delphi daromi 
> CachedUpdates ir lentos lockinimas optimistic, užlokinama tik įrašant 
> galutinius duomenis metodu ApplyUpdates, kas mažai laiko užima, o įrašus 
> vartotojai darys maždaug kas pusvalandį. Bandysiu :)
>
> Vytautas
>
> "Anon"  wrote in message news:icg4fk$qi6$1@trimpas.omnitel.net...
>
> Ačiū už detalų paaiškinimą, šiuo metu visi rašymo veiksmai ir yra vienoje
> tranzakcijoje. Tačiau įrašai pagr. lentelėje niekada nebus trinami(tik
> galima atžymėti įrašą kaip negaliojantį), visi bus kopinami į backupą, 
> metų
> gale lentelės backupinamos, išvalomos ir vėl iš pradžių :). Dėl numeravimo
> iš eilės gal ne taip svarbu, kokia bus eilė, ar bus praleistų numerių,
> svarbu įrašo numerio unikalumas. O pagal mano siūlytą veiksmų tvarką
> vartotojas pirma turi papildyti įrašą(padidinti įrašą vienetuku), po to
> pasiimti, tuo metu numerio lentelė lockinta, kitas vartotojas negalės tuo
> metu į ją rašyti, o tuo pačiu ir pasiimti to paties numeriuko. Lyg ir
> nematau logikos klaidų, gal kas mato ?
>
> Vytautas
>
>
> "2x50"  wrote in message news:icg1i6$ls3$1@trimpas.omnitel.net...
>
> Sveiki,
>
> as kaip duombazistas tai galeciau tik patarti isnaudoti visas dbvs 
> siulomas
> galimybes. Jei dbvs turi transakciju valdymo mechanizma, tai reiketu ji ir
> panaudoti. Jei aplikacijoj vartotojo atliktas veiksmas sukuria irasa 3jose
> lentelese, tai visu siu irasu sukurimas turetu buti vienoje transakcijoje.
> Be to, pirmiausiai irasas turi buti sukurtas master lentoj, o tik veliau
> detail lentose, o ne atvikrsciai. Taip pat tos lentos turetu tureti PK ir 
> FK
> constraint'us.
> Del numeravimo is eiles, tai siulau tai pamirsti ir daugiau neprisiminti,
> ypac kai yra konkurentines transakcijos. Kodel?
> 2 paprasti klausimai.
> Vartotojas V1 pradeda transakcija T1, jam priskiriamas numeriukas 1. Is
> karto po jo varototjas V2 pradeda transakcija T2 (kol T1 dar nera
> pasibaigus), kuriai priskiriamas numeris 2. Vartotojas V1 nutraukia
> transakcija T1. Pirmas klausimas - ka daryti su numeriu 2 transakcijoj T2?
> Antras klausimas - ka daryti su numeravimu "is eiles" lenteleje, kai is 
> jos
> irasas istrinamas?
> Atsakius i siuos klausimus isvada turetu buti "jo, neverta terliotis"...
> t.y. mano pasiulymas yra naudoti AutoIncrement (galima ir is savo 
> lenteles,
> ner skirtumo) ir visus irasus visose susijusiose lentelese daryti tos 
> pacios
> transakcijos metu...
>
> "Anon" <anon@pisem.net> wrote in message
> news:icfrf5$av0$1@trimpas.omnitel.net...
>> Na, turiu dar vieną klausimą iš Delphi + MySQL :)  Į lentelę įterpinėja 
>> įrašus apie 20 vartotojų, įrašams reikalinga suteikti unikalų numerį, 
>> kurie didėtų iš eilės, nuosekliai. AutoIncrement tipas netinka - dirbama 
>> per cached updates, lockingas optimistinis, numeris reikalingas įrašyti į 
>> kitas 3 lenteles prieš užfiksuojant pagrindinėje, o AutoIncrement'as 
>> suveikia tik po komandos ApplyUpdates. Žodžiu, ar veiktų toks metodas: 
>> atskiroje lentelėje laikomas 1 įrašas su vienu numerio lauku(pradžioj Nr 
>> yra 0) , kuriantis pagr. lentelėje įrašą vartotojas užlockina lentelę su 
>> numerio lauku, padidina numerį vienetu, pasiima jį ir nuima lockinimą. Tą 
>> patį daro ir kiti. O gal čia aš dviratį išradinėju? IŠ anksto ačiū 
>> patarusiems.
>>
>> Vytautas
>