Tema: Re: unikalus įrašo numeris
Autorius: Anon
Data: 2010-11-23 12:19:32
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