Vaje kaip nepataikei su "visada". 1. Jei yra normali trijų sluoksnių architektūra - reiškia db yra tik objektų būsenoms saugoti, o ryšiai tarp objektų - pačių objektų reikalas (biznio objektų, ne db objektų). 2. Premature optimization is root of all evil. Gal objektų hierarchija neriboto gylio, o UI dizainas toks, kad ekrane atvaizduojami tik tėvai su vaikais (be senelių ir be anūkų)? M. > Bet kokio dydzio lentai, cia viena lenta. Kuo ji didesne, tuo labiau turi > buti grieztai organizuota viena, duomenys istraukiami viena sql uzklausa. > Jordanai tu per nelyg iprates visus duomenis pasiimti i savo megstamus web > servisus, ir po to atlikti manipuliacinius rysius tarp ju > Tai yra bet kokiu atveju neteisinga, tau minejau ne karta. Duomenis visada > turi traukti taip, lyg butu lentose milijardas irasu, kitu atveju tavo > projektai optimaliai veiks, kol lentos bus pustustes. > "Jornada Del Muerto"<Jornada@Lythum.lt> wrote in message > news:ikl5th$551$1@trimpas.omnitel.net... >> Nedidelem db laisvai daryt galima 1 lenta manau: >> >> objektas { id, parent_id, name, desc } >> >> kur parent id yra tevo id, po to traukt aliasindamas gali, pvz: >> >> >> select >> o1.id as o1_id, >> o1.name as o1_name >> -- vaikai >> o2.id as o2_id, >> o2.name as o2_name >> -- anukai >> o3.id as o3_id, >> o3.name as o3_name >> from >> objektas o1 >> left join objektas o2 on >> o2.parent_id = o1.id >> left join objektas o3 on >> o3.parent_id = o2.id >> >> Cia aisku tik pavizdys kaip susijoinina lenta su pacia savimi, nezinau >> kokia programavimo kalba darysi, paprastai medinem strukturom kurios >> didelio ar neriboto dydzio gerai tinka: >> >> 1. rekursija >> 2. lazy load -lazy load tai kada uzkrauni tik medzio pagrindinius >> elementus, o kada vartotojas atidarineja kazkuri uzkrauni jo vaikus ir >> t.t.. ta prasme is karto nekraunamas visas medis, o tik kada vartotojui to >> objekto vaiku prireikia, tai labai gerai tinka kada medis didelis ar net >> begalinis. >> >> Pvz tureciau as medzio controla, butu kazkas tokio: >> >> >> // Isivaizduokime TreeNode father Tag memberis visada saugos node id >> void FillTree (TreeNode father) { >> >> // nezinau kokiu budu dirbsi su db tai tik improvizuoju, kad daleiskime >> turime darbo su db biblioteka kuri turi tokia funkcija >> // paimame is db tik konkretaus elemento vaikus >> DataTable table = db.Query( >> "Select * From objektas Where prent_id = " + >> father.Tag.ToString()); >> >> / ** tokiu budu neprireikia mums visam algoritmui jokios sudetingos SQL >> uzklausos **/ >> >> >> // visus viakus pridedame prie medzio >> foreach(DataRow row in table.Rows){ >> >> // sukuriamas vaiko medinis elementas >> TreeNode kid = new TreeNode( >> row["name"].ToString()); >> >> // priskiriamas jam jo id >> kid.Tag = row["id"].ToString(); >> >> // Kazkada vaikas irgi tampa tevu :) >> // krauname vaiko vaikus - kvieciame sia funkcija tik kad pildytu >> ji - kaip sakant darome rekursija >> FillTree (kid); >> >> // pridedamas vaikas prie medzio >> // rasyta is galvos, o su tree dirbau senokai tai cia gali paklaidu >> buti, svarbu kaip mazdaug veikt turi parodyt noriu >> // is esmes prisidejo vaikas ir jo visi vaikai ir vaiku vaikai ir >> t.t.. >> // galima buvo pries kvieciant FillTree tapati daryti tada pirmiau >> ji pridetu o tik po to jo vaikus >> father.Nodes.Add(kid); >> } >> } >> >> >> O lazy load'ui labiau tinka OOP principas, isivaizduokime medzio elementas >> yra objektas: >> >> class Node : TreeNode { >> >> // metoda kviesti geriausiai kaip kreipiamasi i tree elementa kad >> pakraut vaikus >> public vod LoadKids (){ >> DataTable table = db.Query( >> "Select * From objektas Where prent_id = " + >> this.Tag.ToString()); >> >> // visus viakus pridedame prie medzio >> foreach(DataRow row in table.Rows){ >> >> // sukuriamas vaiko medinis elementas >> TreeNode kid = new TreeNode( >> row["name"].ToString()); >> >> // priskiriamas jam jo id >> kid.Tag = row["id"].ToString(); >> father.Nodes.Add(kid); >> } >> } >> } >> >> >> Na va siek tiek logikos pamastymams, kaip galima padaryti net neparasius >> jokios sudetingos SQL uzklausos, o trivialiai. >> >> Sekmes! >> JDM >> >> "Deivas"<sd@dfds.lt> wrote in message news:op.vrn66yehf76c7y@merkys... >> Dėkui labai visiems. Aš nei studentas nei ką, tiesiog prireikė čia tokį >> smulkų moduliuką parašyti, galvojau bus visai simple, bet va, susidūriau >> su tokiu galvosūkiu. Dar neturėjau laiko išbandyti pasiūlymų, bet manau, >> kad kas nors tiks. >> >> Tiesa, prieš kelias dienas atėjo mintis, kad galbūt mano lentelės >> struktūra tokima reikalui netinkama. Gal reikia perdaryti kitaip. Čia >> kažkas, berods, panašų sprendimą minėjo. Aš galvoju, kad reikia daryti dvi >> lenteles. >> Pirmoje - id, vardas, pavarde. >> Antroje - id, tevo id, motinos id. >> >> Tuomet gal būtų paprasčiau. Kurį variantą geriau pasirinkti. Duomenų nebus >> labai daug - na į metus koks 100 įrašų. >> Dar kartą ačiū. >> >> >> On Thu, 24 Feb 2011 21:41:54 +0200, Deivas<sd@dfds.lt> wrote: >> >>> Sveiki, >>> >>> gal pagelbėsit. Tarkim turiu tokią lentelę: >>> >>> Id >>> tevoId >>> motinosId >>> vardas >>> pavarde >>> >>> Kaip parašyti užklausą, kad parodytų asmens tėvus ir senelius, t.y.: >>> >>> id, vardas, pavarde, TevoVardas, MotinosVardas, TevoTevoVardas, >>> TevoMotinosVardas, MotinosTevoVardas, MotinosMotinosVardas >>> >>> Parašiau lakoniškai, bet tikiuosi esmę supratot. Ačiū iš anksto jeigu >>> užvesit ant kelio. >> >> >> -- >> Using Opera's revolutionary email client: http://www.opera.com/mail/ > >