Reprezentacja i obsługa hierarchii w SQL Server 2008/2008R2<br />Łukasz Grala <br />MVP SQL Server | MCT<br />
Łukasz Grala – MVP SQL Server | MCT<br />Niezależny konsultant (bazy i hurtownie danych, data mining, analiza danych, audy...
Agenda<br />Co to jest hierarchia?<br />Hierarchie w SQL Server 2008/2008R2<br />Self-Join i rekurencja<br />Typ hierarchy...
Hierarchie<br />Wprowadzenie<br />lukasz@grala.biz<br />
Hierarchie<br />Słownik<br />Pracownicy<br />Organizacja<br />BoM (Bill of Material)<br />Zadania w projekcie<br />System ...
Hierarchie<br />lukasz@grala.biz<br />
Hierarchie<br />GRAF – zbiór węzłów i krawędzi<br />Drzewo – specjalny graf<br />Hierarchia odmiana drzewa<br />lukasz@gra...
Hierarchie<br />Reprezentacja w SQL Server 2008/2008R2<br />lukasz@grala.biz<br />
Reprezentacja w SQL Server 2008<br />XML<br />HierarchyId<br />Self-Join<br />lukasz@grala.biz<br />
Reprezentacja w SQL Server 2008<br />XML<br />CREATE TABLE XMLOrg<br />    (<br />Orgidint,<br />Orgdataxml<br />    ) ;<b...
Hierarchie - XML<br />Xpath<br />XQuery<br />lukasz@grala.biz<br />
Reprezentacja w SQL Server 2008<br />Self-Join<br />lukasz@grala.biz<br />
Reprezentacja w SQL Server 2008<br />Self-Join<br />lukasz@grala.biz<br />
Self-Join<br />SELECT<br />prac.ID_Employee, prac.LastName,<br />manager.FirstName, manager.LastName<br />FROM Employee pr...
Demo<br />Self-Join<br />lukasz@grala.biz<br />
Hierarchie<br />Self-Join i rekurencja<br />lukasz@grala.biz<br />
Self-Join i rekurencja<br />AnchorMember – początek drzewa rekurencji<br />Operator UNION ALL<br />RecursiveMember – połąc...
Demo<br />Self-Join i CTE (rekurencja)<br />lukasz@grala.biz<br />
Hierarchie<br />HierarchyID<br />lukasz@grala.biz<br />
Hierarchie<br />Typ do reprezentacji hierarchii<br />Posiada własne metody<br />Optymalne - kompaktowe składowanie (duża „...
HierarchyId - indeksy<br />DEPTH-FIRST INDEX<br />lukasz@grala.biz<br />
HierarchyId - indeksy<br />BREADTH-FIRST INDEX<br />lukasz@grala.biz<br />
Indeksy<br />CREATE CLUSTERED INDEX Org_Breadth_First<br />ON Organization(OrgLevel, BusinessEtityID);<br />CREATE UNIQUE ...
Demo<br />HierarchyID<br />lukasz@grala.biz<br />
Hierarchie<br />Metody HierarchyID<br />lukasz@grala.biz<br />
Metody HierarchyID<br />T-SQL<br />CLR / .Net<br />Dynamiczne  .<br />Statyczne ::<br />lukasz@grala.biz<br />
Metody HierarchyID<br />GetAncestor()<br />GetDescendant()<br />GetRoot()<br />IsDescendantOf()<br />Parse()<br />Read()<b...
Metody w CLR/.Net<br />SqlHierarchyId parent, child1, child2;<br />parent = SqlHierarchyId.GetRoot();<br />child1 = parent...
Demo<br />Metody HierarchyID<br />lukasz@grala.biz<br />
Hierarchie<br />Porównanie Self-Join i hierarchyID<br />lukasz@grala.biz<br />
Porównanie Self-Join i HierarchyID<br />lukasz@grala.biz<br />
Demo<br />Porównanie Self-Join i hierarchyID<br />lukasz@grala.biz<br />
Pytania?<br />Prowadzi blogi:<br />http://powerpivot.info.pl<br />http://sqlresearch.com<br />Kontakt:<br />lukasz@grala.b...
Dziękuję za uwagę<br />Prowadzi blogi:<br />http://powerpivot.info.pl<br />http://sqlresearch.com<br />Kontakt:<br />lukas...
Upcoming SlideShare
Loading in …5
×

Reprezentacja hierarchii w SQL Server 2008/2008R2 - 2nd Silesian CodeCamp

3,294 views
3,195 views

Published on

W życiu mamy często do czynienia z hierarchią. Problem pojawia się jak mamy ją odpowiednio zapisać w bazie danych, żeby później z niej efektywnie korzystać. W ramach sesji będą przedstawione zagadnienia związane zarówno z reprezentacją hierarchii przy użyciu złączenia self-join, jak i przy użyciu nowego typu hirarchyid. W ramach sesji przedstawione będą metody korzystania z obu reprezentacji i porównanie ich wydajności.
Prezentacja z konferencji 2nd Sielesian CodeCamp która odbyła się 9 kwietnia 2011 roku.

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,294
On SlideShare
0
From Embeds
0
Number of Embeds
1,981
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Grafy – cykliczne, acykliczne, Drzewo – acykliczny graf, gdzie między dodolnymi dwoma węzłami istnieje tylko jedna ścieżkaHierarchia – drzewo z jednym korzeniem, gdzie każdy następny węzeł ma jednego rodzica
  • Reprezentacja hierarchii w SQL Server 2008/2008R2 - 2nd Silesian CodeCamp

    1. 1.
    2. 2. Reprezentacja i obsługa hierarchii w SQL Server 2008/2008R2<br />Łukasz Grala <br />MVP SQL Server | MCT<br />
    3. 3. Łukasz Grala – MVP SQL Server | MCT<br />Niezależny konsultant (bazy i hurtownie danych, data mining, analiza danych, audyty baz danych – SQL Server, BI, SQL Azure, konsolidacja BI w SharePoint 2010)<br />Trener technologii Microsoft, wykładowca na wyższych uczelniach<br />Lider Polish SQL Server User Group (PLSSUG) Poznań<br />Prelegent na wielu konferencjach informatycznych<br />Prowadzi blogi:<br />http://powerpivot.info.pl<br />http://sqlresearch.com<br />Kontakt:<br />lukasz@grala.biz<br />
    4. 4. Agenda<br />Co to jest hierarchia?<br />Hierarchie w SQL Server 2008/2008R2<br />Self-Join i rekurencja<br />Typ hierarchyid<br />Metody hierarchyid<br />Porównanie metod reprezentacji<br />lukasz@grala.biz<br />
    5. 5. Hierarchie<br />Wprowadzenie<br />lukasz@grala.biz<br />
    6. 6. Hierarchie<br />Słownik<br />Pracownicy<br />Organizacja<br />BoM (Bill of Material)<br />Zadania w projekcie<br />System plików<br />Wizualizacja stron web (mapa serwisów)<br />Klas / Obiektów<br />lukasz@grala.biz<br />
    7. 7. Hierarchie<br />lukasz@grala.biz<br />
    8. 8. Hierarchie<br />GRAF – zbiór węzłów i krawędzi<br />Drzewo – specjalny graf<br />Hierarchia odmiana drzewa<br />lukasz@grala.biz<br />
    9. 9. Hierarchie<br />Reprezentacja w SQL Server 2008/2008R2<br />lukasz@grala.biz<br />
    10. 10. Reprezentacja w SQL Server 2008<br />XML<br />HierarchyId<br />Self-Join<br />lukasz@grala.biz<br />
    11. 11. Reprezentacja w SQL Server 2008<br />XML<br />CREATE TABLE XMLOrg<br /> (<br />Orgidint,<br />Orgdataxml<br /> ) ;<br />lukasz@grala.biz<br />
    12. 12. Hierarchie - XML<br />Xpath<br />XQuery<br />lukasz@grala.biz<br />
    13. 13. Reprezentacja w SQL Server 2008<br />Self-Join<br />lukasz@grala.biz<br />
    14. 14. Reprezentacja w SQL Server 2008<br />Self-Join<br />lukasz@grala.biz<br />
    15. 15. Self-Join<br />SELECT<br />prac.ID_Employee, prac.LastName,<br />manager.FirstName, manager.LastName<br />FROM Employee prac JOIN Employee manager<br />ON prac.ID_Manager = manager.ID_Employee<br />lukasz@grala.biz<br />
    16. 16. Demo<br />Self-Join<br />lukasz@grala.biz<br />
    17. 17. Hierarchie<br />Self-Join i rekurencja<br />lukasz@grala.biz<br />
    18. 18. Self-Join i rekurencja<br />AnchorMember – początek drzewa rekurencji<br />Operator UNION ALL<br />RecursiveMember – połączenie self-join z CTE<br />SELECT ManagerID, EmployeeID<br />FROM Employee WHERE ManagerID = NULL<br />UNION ALL<br />SELECT c.ManagerID, e.EmployeeID<br />FROM Employee e JOIN CTE c ON c.EmoloyeID = e.ManagerID<br />lukasz@grala.biz<br />
    19. 19. Demo<br />Self-Join i CTE (rekurencja)<br />lukasz@grala.biz<br />
    20. 20. Hierarchie<br />HierarchyID<br />lukasz@grala.biz<br />
    21. 21. Hierarchie<br />Typ do reprezentacji hierarchii<br />Posiada własne metody<br />Optymalne - kompaktowe składowanie (duża „kompresja”)<br />lukasz@grala.biz<br />
    22. 22. HierarchyId - indeksy<br />DEPTH-FIRST INDEX<br />lukasz@grala.biz<br />
    23. 23. HierarchyId - indeksy<br />BREADTH-FIRST INDEX<br />lukasz@grala.biz<br />
    24. 24. Indeksy<br />CREATE CLUSTERED INDEX Org_Breadth_First<br />ON Organization(OrgLevel, BusinessEtityID);<br />CREATE UNIQUE INDEX Org_Depth_First<br />ON Organization(BusienssEntityID);<br />lukasz@grala.biz<br />
    25. 25. Demo<br />HierarchyID<br />lukasz@grala.biz<br />
    26. 26. Hierarchie<br />Metody HierarchyID<br />lukasz@grala.biz<br />
    27. 27. Metody HierarchyID<br />T-SQL<br />CLR / .Net<br />Dynamiczne .<br />Statyczne ::<br />lukasz@grala.biz<br />
    28. 28. Metody HierarchyID<br />GetAncestor()<br />GetDescendant()<br />GetRoot()<br />IsDescendantOf()<br />Parse()<br />Read()<br />GetReparentedValue()<br />ToString()<br />Write()<br />lukasz@grala.biz<br />
    29. 29. Metody w CLR/.Net<br />SqlHierarchyId parent, child1, child2;<br />parent = SqlHierarchyId.GetRoot();<br />child1 = parent.GetDescendant(SqlHierarchyId.Null, SqlHierarchyId.Null);<br />child2 = parent.GetDescendant(child1, SqlHierarchyId.Null);<br />Console.Write(parent.GetDescendant(child1, child2).ToString());<br />lukasz@grala.biz<br />
    30. 30. Demo<br />Metody HierarchyID<br />lukasz@grala.biz<br />
    31. 31. Hierarchie<br />Porównanie Self-Join i hierarchyID<br />lukasz@grala.biz<br />
    32. 32. Porównanie Self-Join i HierarchyID<br />lukasz@grala.biz<br />
    33. 33. Demo<br />Porównanie Self-Join i hierarchyID<br />lukasz@grala.biz<br />
    34. 34. Pytania?<br />Prowadzi blogi:<br />http://powerpivot.info.pl<br />http://sqlresearch.com<br />Kontakt:<br />lukasz@grala.biz<br />
    35. 35. Dziękuję za uwagę<br />Prowadzi blogi:<br />http://powerpivot.info.pl<br />http://sqlresearch.com<br />Kontakt:<br />lukasz@grala.biz<br />

    ×