Tema: Re: SQL query klausimas
Autorius: If
Data: 2011-03-03 08:59:19
Medis tai tik atvaizdavimo metodika, o ne pacios duomenu strukturos. O medi 
atvaizduoti daznai prireikia bet kokio dydzio bazei. Tiesiog neimami is 
karto visi duomenys, o tik tie kurie reikia. Tai gal tau susdare ispudis, 
kad pati baze nedidele. Pvz kad ir si asmenu lenta, gali buti kad ir 
milijonine, bet imi tik tam tikrus asmenis, Petraicius, Jonaicius, ar 
Balberisku gyventojus, priklausomai kokie poreikiai ir suvarai i medi. Bet 
pacios lentos nelieti. Negaliu pakesti ,kai ateina naujuju laiku 
puoseletojai ir pradeda organizuoti medzio strukturas, perstrukturizacijas o 
dazniausiai nusistrukturizacijas, reorganizuodami lentas fiziskai. Kaip kas 
pateikia duomenis, ne mano reikalas, bet lentomis naudotis bet kam gali 
prireikti. Sis atvejis. Veikejui pritruko sriubo atvaizduoti duomenis. Taf 
taf jau is karto idejos kaip lentas isdraskyti. Po kurio laiko dazniausiai 
nei pacio veikejo nei jo atsakomybes uz tai. Nei lentas atgal nors kazka 
panasaus i bendra struktura varineti. Nes tokiu atveju tektu vos ne viska 
perrasyti kas ant tu lentu sukosi. O kiek tokiu sprendimu lietuvos zemeleje, 
nerealias apsukas igave. O kokie po to tokiu strukturu aptarnavimo kastai, 
techninis palaikymas kai issiputusios velnias zino kiek i visas puses, 
berniuku scriptuku nuolatinis samdymas, maziausiam uzdaviniui isspresti ar 
analizei bei reportams pateikti. O dar dazniau tokias strukturas 
suorganizavusi, laiko apsizergusi kokia teta, nes tik ji ir pats velnias 
zino, kas ir kur joje randasi.
Cia buvo diskusija apie tai, kaip padaryti sistemas kuo maziau priklausomas. 
Stai gyvas problemos pavyzdelis, jau buvo idejos kelias lentas daryti, bazes 
gilius is ju nustatineti. O dar ankstesneje temoje,  vienas veikejas, 
panasias "facebookines" technologijas ivardino kaip siuolaikiskas.
Tai noreciau as pamatyti sudokumentuotus oficialius saltinius, kuriuose butu 
teigiama, kad reliaciniu duomenu baziu metodikos yra atgyvenusios. Ir tokie 
rysiai tarp lentu kaip ( vienas su vienu, vienas su daugeliu, ir daugelis su 
daugeliu) ir ne kitokie, lemiantys duombaziu strukturas, yra taip pat 
atgyvene.
"Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message 
news:ikm0bo$ihc$1@trimpas.omnitel.net...
>    Bent is savo patirties zinau kad medines strukturos retai buna dideles, 
> paprastai tai kazkokios kategorijos ir pan.. retai tai buna milijonai 
> ju... aisku medziu gali buti ir kitokiu.
>
> "If" <baska@hotmail.com> wrote in message 
> news:ikli1s$rod$1@trimpas.omnitel.net...
>> Na tas nedidele, jei vienos gimines lygi :), tai rysius nustatineti 
>> paemus
>> viska i pradine lenta i ramus, galima zaisti. Bet daznai tas  nedidele,
>> labai salyginis reiskinys. Daznai bazes iki keliu milijonu irasu, tai tik
>> vidutines ar mazos bazes. O paimti po kelis milijonus i objektus serveri,
>> kaip cia vienas dziaugsmingai su vajeeeeeee siule,  kai tokiu objektu  ne
>> vienas ir ne du, nesunku isivaizduoti kas su tuo vargsu servuku darysis.O
>> dar tokio pat dydzio objektus,mazai atfiltravus, perdavineti tinklu, tai
>> malonus potyriai dar labiau nenusakomi.
>>
>> "Jornada Del Muerto" <Jornada@Lythum.lt> wrote in message
>> news:iklg7r$o50$1@trimpas.omnitel.net...
>>> 1. Sake kad db nedidele;
>>>
>>> 2. Toli grazu ne visada webservisus naudoju  + pagrinde ten davineju
>>> sql....
>>>
>>> "If" <baska@hotmail.com> wrote in message
>>> news:ikl7te$8jm$1@trimpas.omnitel.net...
>>>> 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/
>>>>
>>>>
>>
>>