Tema: Re: unikalus įrašo numeris
Autorius: Jornada Del Muerto
Data: 2010-11-23 12:24:49
    Jei lockinama ilgam tai tai sudaryti gali bedu, nenorint pritersti geros duombazes gal tada geriau butu sukurt analogiskos strukturos pagalbines lenteles kur deti visa ta informacija, o jei galu gale kazkas nepradeda galiot nekelti i tikra duombaze kur ir gautu tikrus ID, arba kad ir laikina vietine DB tam naudoti, pvz. kad ir SQLite ten viska irasai be sazines grauzimo ir jeigu uzbaigiama tranzakcija tada lieka tik i serveri nusiust, kur gaus tikrus ID... na nezinau as bent esu pries ilgalaiki lockinima...

"Anon" <anon@pisem.net> 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
> 
>