SlideShare a Scribd company logo
1 of 35
Reprezentacja i obsługa hierarchii
w SQL Server 2008/2008R2
Łukasz Grala
MVP SQL Server | MCT
Łukasz Grala – MVP SQL Server | MCT
 • Niezależny konsultant (bazy i hurtownie danych, data mining,
   analiza danych, audyty baz danych – SQL Server, BI,
   SQL Azure, konsolidacja BI w SharePoint 2010)
 • Trener technologii Microsoft, wykładowca na wyższych
   uczelniach
 • Lider Polish SQL Server User Group (PLSSUG) Poznań
 • Prelegent na wielu konferencjach informatycznych

Prowadzi blogi:             Kontakt:
http://powerpivot.info.pl   lukasz@grala.biz
http://sqlresearch.com
Agenda

•   Co to jest hierarchia?
•   Hierarchie w SQL Server 2008/2008R2
•   Self-Join i rekurencja
•   Typ hierarchyid
•   Metody hierarchyid
•   Porównanie metod reprezentacji



                    lukasz@grala.biz
Hierarchie
                   Wprowadzenie




lukasz@grala.biz
Hierarchie

•   Słownik
•   Pracownicy
•   Organizacja
•   BoM (Bill of Material)
•   Zadania w projekcie
•   System plików
•   Wizualizacja stron web (mapa serwisów)
•   Klas / Obiektów

                    lukasz@grala.biz
Hierarchie

                                  Marketing
             Sprzedaż
                                   Handel
 Firma
               GM                 Produkcja


               lukasz@grala.biz
Hierarchie

• GRAF – zbiór węzłów i krawędzi
• Drzewo – specjalny graf
• Hierarchia odmiana drzewa




                  lukasz@grala.biz
Hierarchie
Reprezentacja w SQL Server 2008/2008R2




               lukasz@grala.biz
Reprezentacja w SQL Server 2008




              lukasz@grala.biz
Reprezentacja w SQL Server 2008


CREATE TABLE XMLOrg
    (
    Orgid int,
    Orgdata xml
    ) ;




                  lukasz@grala.biz
Hierarchie - XML

• Xpath
• XQuery




             lukasz@grala.biz
Reprezentacja w SQL Server 2008



    ID_Employee    FirstName         LastName   ID_Manager
        1         Rob              Walters        NULL
        2         Ken              Sanchez          1
        3         Thierry          D’Hers           1
        4         Mary             Dempsey          2




                            lukasz@grala.biz
Reprezentacja w SQL Server 2008


ID_Employee    FirstName    LastName           ID_Manager
    1         Rob          Walters                 NULL
    2         Ken          Sanchez                     1
    3         Thierry      D’Hers                      1
    4         Mary         Dempsey                     2




                                    lukasz@grala.biz
Self-Join
SELECT
prac.ID_Employee, prac.LastName,
manager.FirstName, manager.LastName
FROM Employee prac JOIN Employee manager
ON prac.ID_Manager = manager.ID_Employee

            ID_Employee        FirstName      LastName   ID_Manager
                1           Rob              Walters       NULL
                2           Ken              Sanchez         1
                3           Thierry          D’Hers          1
                4           Mary             Dempsey         2


                          lukasz@grala.biz
Demo
                   Self-Join




lukasz@grala.biz
Hierarchie
         Self-Join i rekurencja




lukasz@grala.biz
Self-Join i rekurencja




SELECT ManagerID, EmployeeID
FROM Employee WHERE ManagerID = NULL
UNION ALL
SELECT c.ManagerID, e.EmployeeID
FROM Employee e JOIN CTE c
ON c.EmoloyeID = e.ManagerID

                    lukasz@grala.biz
Demo
Self-Join i CTE (rekurencja)




 lukasz@grala.biz
Hierarchie
                     HierarchyID




lukasz@grala.biz
Hierarchie

• Typ do reprezentacji hierarchii
• Posiada własne metody
• Optymalne - kompaktowe składowanie
  (duża „kompresja”)




                 lukasz@grala.biz
HierarchyId - indeksy

DEPTH-FIRST INDEX




                lukasz@grala.biz
HierarchyId - indeksy

BREADTH-FIRST INDEX




                lukasz@grala.biz
Indeksy

CREATE CLUSTERED INDEX Org_Breadth_First
ON Organization(OrgLevel, BusinessEtityID);

CREATE UNIQUE INDEX Org_Depth_First
ON Organization(BusienssEntityID);




                   lukasz@grala.biz
Demo
                   HierarchyID




lukasz@grala.biz
Hierarchie
          Metody HierarchyID




lukasz@grala.biz
Metody HierarchyID
 • T-SQL
 • CLR / .Net


 • Dynamiczne .
 • Statyczne ::




                  lukasz@grala.biz
Metody HierarchyID
•   GetAncestor()
•   GetDescendant()
•   GetRoot()
•   IsDescendantOf()
•   Parse()
•   Read()
•   GetReparentedValue()
•   ToString()
•   Write()

                    lukasz@grala.biz
Metody w CLR/.Net

SqlHierarchyId parent, child1, child2;
parent = SqlHierarchyId.GetRoot();
child1 =
parent.GetDescendant(SqlHierarchyId.Null,
SqlHierarchyId.Null);
child2 = parent.GetDescendant(child1,
SqlHierarchyId.Null);
Console.Write(parent.GetDescendant(child1,
child2).ToString());



                   lukasz@grala.biz
Demo
          Metody HierarchyID




lukasz@grala.biz
Hierarchie
Porównanie Self-Join i hierarchyID




         lukasz@grala.biz
Porównanie Self-Join i HierarchyID
                                              Porównanie statystyk




400

300

200                                                                      HierarchyID
 100                                                                     Self-Join
      0                                                      Self-Join

          Modify
                   Select                                 HierarchyID
                            Transaction
                                            Execution
                                lukasz@grala.biz
Demo
Porównanie Self-Join i hierarchyID




         lukasz@grala.biz
Pytania?


Prowadzi blogi:              Kontakt:
http://powerpivot.info.pl    lukasz@grala.biz
http://sqlresearch.com
Dziękuję za uwagę


Prowadzi blogi:             Kontakt:
http://powerpivot.info.pl   lukasz@grala.biz
http://sqlresearch.com

More Related Content

More from SQLExpert.pl

Techniki eksploracji danych
Techniki eksploracji danychTechniki eksploracji danych
Techniki eksploracji danychSQLExpert.pl
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQLExpert.pl
 
Poziomy izolowania transkacji
Poziomy izolowania transkacjiPoziomy izolowania transkacji
Poziomy izolowania transkacjiSQLExpert.pl
 
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...SQLExpert.pl
 

More from SQLExpert.pl (6)

ETL versus EIM
ETL versus EIMETL versus EIM
ETL versus EIM
 
Techniki eksploracji danych
Techniki eksploracji danychTechniki eksploracji danych
Techniki eksploracji danych
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracji
 
Poziomy izolowania transkacji
Poziomy izolowania transkacjiPoziomy izolowania transkacji
Poziomy izolowania transkacji
 
SQL Server Myths
SQL Server MythsSQL Server Myths
SQL Server Myths
 
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
Always On - Wydajność i bezpieczeństwo naszych danych - High Availability SQL...
 

Reprezentacja i obsługa danych hierarchicznych w SQL Server 2008/2008R2

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

Editor's Notes

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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