Tema: Re: unikalus įrašo numeris
Autorius: Jornada Del Muerto
Data: 2010-11-23 12:19:59
+  

+ Daznai situacijos su operavimu keliom lentom spresti geriausiai tranzakcijoje SQL procedurose, o variantai su atskiroje lentoj ID kiek teke susidurt buvo tik sistemoje kurioje fiksuojamas kiekviens pakeitimas ir bet kokiam pakeitimui ivykus senas irasas buvo paliekamas kad tureti visa istorija ir uzdaromas priskiriant jam iki kada galiojo, tipo pavizdys su asmeniu:

AsmensId  ( AsmensId PK )
Asmuo ( id PK, AsmensId (ref AsmensId.AsmensId) , Vardas, Pavarde, Adresas ir t.t.... Iki datetime NULL )

Pvz keiciasi pavarde ar koks adresas, taciau su zmogum pries tai buvo pasirasyta sutartis tokia ir tokia data, tada kai keisis kazkas IKI igaus to momento data, ir bus sukuriamas naujas irasas Asmuo lentoj su tuo paciu AsmensId ir kopija visu duomenu + pakeitimai, o tokiu atveju kaip jo tikrai sito nereikia... labai pritariu del tranzakciju.


"2x50" <tlchj61@gmail.com> 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 
> 
>