Welcome to Sign in | Help
in Search

Episodul nr. 4 : "Arborii si cowboy-ii"

Last post 12-04-2006, 4:24 PM by crestinul. 5 replies.
Sort Posts: Previous Next
  •  09-22-2006, 3:14 PM 143

    Episodul nr. 4 : "Arborii si cowboy-ii"

    Din seria “Microsoft SQL Server 2005 in actiune”

    Astazi episodul nr. 4 :

    "Arborii si cowboy-ii"

    O productie “Admindate & Inf, www.diadmin.ro” , 2006

    Scenariul si regia Gheorghe Ciubuc

    Personaje principale:

    Alejandro Morientes – DBA in firma “Los capshunares” cu activitati principale in agricultura, undeva in Spania, langa Madrid, anul de gratie 2006.

    Pedro Garcia – patronul firmei, 50 de ani .

    Maria-Elena Adochitei – romanca,bunaciunea nr. 1 nascuta la Vaslui, aici printre capsuni.

    Miguel Morales – unu din managementul firmei si actionar al ei.

    Consuela Cervantes – bunaciunea nr. 2, secretara dl. Pedro Garcia.

     

    Pedro Garcia(cu telefonul in mana)”Alejandro, vino pana la mine in birou”

    Alejandro Morientes(baiguind)Da, Sefu’,  imediat

    Alejandro urca cu inima cat un purice pana la biroul sefului de la etajul 1 care este langa secretariat.

    Consuela:”Alejandro, mi amor, ce-i cu tine…”

    Alejandro:”Uite ma cheama seful, ce o avea cu mine, nu cumva…”

    Consuela:”Stai draga linistit, probleme cu Uniunea Europeana, acu’ ca o sa-i bage si pe romani si pe bulgari…”

    Alejandro(bagand capul pe usa): “Traiti’ Sefu ”

    Pedro Garcia:”Ce-i ma cu tine? “(Alejandro se albi ca varul)”te-am chemat de o juma’ de ora !”

    Alejandro(sufland usurat):”Sefu, a trebuit sa downloadez….”

    Pedro Garcia:”Bine, bine. Uite care-i problema : vreau sa mi se prezinte o situatie in care sa vad sefii cu subalternii pe ferme, sa stiu si eu care-i sef si care grajdar. Noi avem toti oamenii bagati in calculator, nu?

    Alejandro:”Da, sefu, ma gandesc…”

    Pedro Garcia:”Pai munceste nu gandeste!”

    Alejandro(ranjind cu subinteles):”Sigur, facem si d’astea.Sefu, ma duc pe jos sa pregatesc. Cred ca o sa folosesc CTE-uri”.

    Pedro Garcia:”Cu ce vrei numai sa rezolvi!”

    Dupa un timp Alejandro, prezenta situatia sefului. Iata cum a facut:

    Datele sunt inregistrate in baza de date astfel

    ID(cod angajat)            Nume (Nume angajat)              IDM(Codul sefului acestui angajat)

    (Primele randuri arata astfel)

    12123              Pedro Garcia                Null                                                     

    23411              Miguel Morales            12123

    ….

    (Null inseamna ca Pedro Garcia nu are sef – e normal, doar e patronul!)

    Mai departe, foloseste common table expression (CTE)- o structura care permite cautari recursive pe aceasi tabela

    USE Ferma;

    GO

    WITH Ierarhie (IDM, ID, Nume, Nivel)

    -- “Ierarhie” este numele structurii

    AS

    (

    -- Definesc inceputul ierarhiei(de unde se pleaca, radacina)

        SELECT IDM,ID,Nume,0 as Nivel

                from dbo.emp

        WHERE IDM IS NULL

        UNION ALL

    -- Definesc recursivitatea

        SELECT e.IDM, e.ID, e.Nume,Nivel + 1

        FROM dbo.emp AS e

        INNER JOIN Ierarhie AS d

    -- astfel scot angajatii care au sef(e.IDM) exact codul managerului selectat(d.ID)

            ON e.IDM = d.ID

    )

    -- Instructiunea care executa CTE-ul(Common Table BLOCKED EXPRESSION

    SELECT IDM as CodSef, ID as CodAngajat, Nume as NumeAngajat, Nivel

    FROM Ierarhie

    GO

    SFARSIT 

    Regia ………………………………………………………………..Ciubuc Gheorghe

    Scenariul(dupa un document Microsoft)……………………....………Ciubuc Gheorghe

    Producator………………………………………………………….. Ciubuc Gheorghe

     

    O productie Admindate & Inf, www.diadmin.ro

     

     

     


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  12-02-2006, 4:44 PM 1165 in reply to 143

    Re: Episodul nr. 4 : "Arborii si cowboy-ii"

    Da interesanta facilitate,dar de destul de greu de inteles mecanismul dupa care lucreaza codul asta,vorbesc in cazul meu desigur.Stii cumva succesiunea de apeluri recursive in stiva conditia de oprire a recirsivitatii-a acestor apeluri?
    Merci
    Secolul XXI ori va fi religios ori nu va fi deloc
  •  12-02-2006, 5:14 PM 1166 in reply to 1165

    Re: Episodul nr. 4 : "Arborii si cowboy-ii"

    Aveti aici un exemplu: Recursive Queries Using Common Table Expressions
    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  12-02-2006, 10:56 PM 1172 in reply to 1165

    Re: Episodul nr. 4 : "Arborii si cowboy-ii"

    Calculul opririi la momentul n+1 se bazeaza pe cel de la momentul n; daca nu mai sunt linii de returnat se face oprire:

    iata nivelul-level- 0 este cel care corespunde sefului, liniile urmatoare corespund angajatilor direct subordonati lui si asa mai departe,

    pana ce se ajunge la frunzele arborelui.

    De desfacut cutia neagra a mecanismului CTE , poate o poate face cineva din colegii nostrii de la Redmond, insa eu unul nu mi-as pune problema asta cel putin deocamdata. Iti mai pui probleme de acest gen, de exemplu, in cazul optimizer-ului- cel care alege cel mai bun plan de executie pentru o fraza SQL insa cam atat.

    Ma bucur insa ca exista un feedback la aceasta telenovela!


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  12-03-2006, 10:54 AM 1173 in reply to 1165

    Re: Episodul nr. 4 : "Arborii si cowboy-ii"

    Salut, cred ca pentru intelegere, mai natural este sa privesti nu ca pe o recursivitate, ci ca pe o iteratie cu lucru intr-o coada: ai o coada in care adaugi datele din selectul scris in orginal:

    <quote>

     -- Definesc recursivitatea

        SELECT e.IDM, e.ID, e.Nume,Nivel + 1

        FROM dbo.emp AS e

        INNER JOIN Ierarhie AS d

    -- astfel scot angajatii care au sef(e.IDM) exact codul managerului selectat(d.ID)

            ON e.IDM = d.ID

    </quote>

    Cat timp mai ai ceva in coada, extragi din ea si generezi alte recorduri pe care le adaugi in coada. O parcurgere in latime a unui graf, daca vrei, pornind de la inregistrarea data de:

    <quote>

    SELECT IDM,ID,Nume,0 as Nivel

                from dbo.emp

        WHERE IDM IS NULL

    </quote>

    si mergand pe legaturile (muchiile) date de e.IDM = d.ID. Daca le ai cu algoritmica, atunci e mai natural sa interpretezi in felul acesta. Cum o fi implementarea, asta e alta poveste.

    ...parerea mea.

    Lucian 

  •  12-04-2006, 4:24 PM 1191 in reply to 1173

    Re: Episodul nr. 4 : "Arborii si cowboy-ii"

    merci

    Deci tot algoritmul ala de clasic de parcurgere a arborilor oarecare in care folosesti coada l-am folosit si eu mai demult l-am uitat acuBig Smile


    Secolul XXI ori va fi religios ori nu va fi deloc
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems