Czy mi się przyda hierarchyid?

Bartosz Ratajczyk
Bartosz RatajczykDatabase developer
Czy mi się przyda hierarchyid? 
80. spotkanie PLSSUG Warszawa, 09.10.2014.
O czym będzie? 
• O hierarchiach ogólnie 
• Hierarchyid jako takie 
• Męczenie i dręczenie hierarchyid 
• Ograniczenia i możliwości 
• Linki i literatura
O mnie 
Bartosz Ratajczyk 
programista baz danych 
(i aplikacji) 
czasem też administrator 
PHP, JS, C#, T-SQL, SAS 4GL 
http://bartekr.net | b.ratajczyk@gmail.com | MCTS, MCP
Hierarchia 
ustalony porządek wg wybranego 
kryterium, np. ważności
Przykłady hierarchii 
• schemat organizacyjny firmy 
• system plików 
• kategorie sklepu internetowego 
• wątki dyskusji 
• wykaz składników (bill of materials) 
• masa innych 
• (i innych)
Jak to sensownie obsługiwać w bazie? 
• Adjacency List 
• Nested sets 
• Closure table/bridge table 
• Lineage column / materialized path 
• (inne)
Adjacency List 
element rodzic 
A NULL 
B A 
C A 
D B 
E B 
F E 
G C 
H C 
I C
Nested sets 
element lewy prawy 
A 1 18 
B 2 9 
C 10 17 
D 3 4 
E 5 8 
F 6 7 
G 11 12 
H 13 14 
I 15 16
Closure table/bridge table 
ID element 
1 A 
2 B 
3 C 
4 D 
5 E 
6 F 
7 G 
8 H 
9 I 
rodzic dziecko 
1 2 
1 4 
1 5 
1 6 
2 4 
2 5 
2 6 
5 6 
… … 
rodzic dziecko poziom 
1 2 1 
1 4 2 
1 5 2 
1 6 3 
2 4 1 
2 5 1 
2 6 2 
5 6 1 
… … …
Lineage column/materialized path 
element sciezka 
A A 
B A/B 
C A/C 
D A/B/D 
E A/B/E 
F A/B/E/F 
G A/C/G 
H A/C/H 
I A/C/I
Hierarchyid 
• typ danych .NET 
• materialized path w wersji MS 
• wystarczy jedna kolumna do obsługi hierarchii 
• duże upakowanie danych 
• zawsze bez problemów dodasz węzeł potomny 
• domyślnie przeszukuje w dół hierarchii
Hierarchyid
Metody obsługi 
SELECT 
-- statyczne 
hierarchyid::GetRoot(), 
hierarchyid::Parse('/1/2/3/4/5/'), 
-- dynamiczne 
@h.GetLevel(), 
@h.GetAncestor(@n), 
@h.GetDescendant(@m, @n), 
@h.IsDescendantOf(@n), 
@h.GetReparentedValue(@m, @n), 
@h.ToString() 
-- tylko .NET 
-- hierarchyid.Read() 
-- hierarchyid.Write()
Indeksy 
Depth first
Indeksy 
Breadth first
DEMO
Są pewne ograniczenia 
• maksymalny rozmiar węzła to 892 bajty 
• kanoniczna reprezentacja poziomu/węzła nie 
dłuższa niż 14-15 znaków 
• chyba że mamy węzeł „z kropkami”
Ale i zalety 
• zajmuje mało miejsca 
• wystarczy jedna kolumna do obsługi hierarchii 
• wygodny zestaw metod do obsługi
Porównanie sposobów 
obsługi hierarchii 
(nie, jednak nie)
Co zapamiętać 
• zajmuje niewiele miejsca 
• metody tylko generują identyfikator 
• programista robi całą robotę
Do poczytania 
• Microsoft SQL Server 2008 Bible – Paul 
Nielsen et al. 
• Inside Microsoft SQL Server 2008: T-SQL 
Querying – Itzik Ben-Gan et al. 
• Joe Celko’s Trees and Hierarchies in SQL for 
Smarties, Second Edition – Joe Celko
Linki 
• Jak może działać hierarchyid: 
http://www.adammil.net/blog/v100_how_the_SQL_Server_hierarc 
hyid_data_type_works_kind_of_.html 
• Przykłady porównań metod obsługi hierarchii 
– Bill Karwin - http://www.slideshare.net/billkarwin/models-for-hierarchical- 
data str. 69 lub http://www.slideshare.net/billkarwin/sql-antipatterns- 
strike-back str. 77 
– Stackoverflow: http://stackoverflow.com/questions/4048151/what-are- 
the-options-for-storing-hierarchical-data-in-a-relational-database 
• Jedno z porównań prędkości działania obsługi hierarchii w MS SQL 
http://jsimonbi.wordpress.com/2011/03/01/sql-hierarchy-comparative- 
performance-2/ 
• Patent metody Davida Chandlera: 
http://www.google.com/patents/US6480857
1 of 22

Recommended

Po co mi Temporal Tables? by
Po co mi Temporal Tables?Po co mi Temporal Tables?
Po co mi Temporal Tables?Bartosz Ratajczyk
306 views19 slides
SQL Server + docker - pierwsze kroki by
SQL Server + docker - pierwsze krokiSQL Server + docker - pierwsze kroki
SQL Server + docker - pierwsze krokiBartosz Ratajczyk
364 views21 slides
OLE DB - kiedy FastLoad nie jest takie fast by
OLE DB - kiedy FastLoad nie jest takie fastOLE DB - kiedy FastLoad nie jest takie fast
OLE DB - kiedy FastLoad nie jest takie fastBartosz Ratajczyk
125 views10 slides
Jak działa rekurencyjne CTE? by
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Bartosz Ratajczyk
229 views29 slides
SqlSaturday Denmark 2017 - Automate your SSIS deployment process by
SqlSaturday Denmark 2017 - Automate your SSIS deployment processSqlSaturday Denmark 2017 - Automate your SSIS deployment process
SqlSaturday Denmark 2017 - Automate your SSIS deployment processBartosz Ratajczyk
470 views39 slides
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać by
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
1.2K views61 slides

More Related Content

More from Bartosz Ratajczyk

Szkolenia i certyfikacjesqlserver2016_plssug99 by
Szkolenia i certyfikacjesqlserver2016_plssug99Szkolenia i certyfikacjesqlserver2016_plssug99
Szkolenia i certyfikacjesqlserver2016_plssug99Bartosz Ratajczyk
282 views18 slides
Podstawy ETL z SSIS by
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSISBartosz Ratajczyk
3.3K views88 slides
XML w SQL Server w praktyce by
XML w SQL Server w praktyceXML w SQL Server w praktyce
XML w SQL Server w praktyceBartosz Ratajczyk
1K views34 slides
Jak szybko przetwarzasz hurtowe ilości XML? by
Jak szybko przetwarzasz hurtowe ilości XML?Jak szybko przetwarzasz hurtowe ilości XML?
Jak szybko przetwarzasz hurtowe ilości XML?Bartosz Ratajczyk
321 views43 slides
Operacje minimalnie logowane by
Operacje minimalnie logowaneOperacje minimalnie logowane
Operacje minimalnie logowaneBartosz Ratajczyk
327 views17 slides
Co to te CTE? by
Co to te CTE?Co to te CTE?
Co to te CTE?Bartosz Ratajczyk
512 views30 slides

Czy mi się przyda hierarchyid?

  • 1. Czy mi się przyda hierarchyid? 80. spotkanie PLSSUG Warszawa, 09.10.2014.
  • 2. O czym będzie? • O hierarchiach ogólnie • Hierarchyid jako takie • Męczenie i dręczenie hierarchyid • Ograniczenia i możliwości • Linki i literatura
  • 3. O mnie Bartosz Ratajczyk programista baz danych (i aplikacji) czasem też administrator PHP, JS, C#, T-SQL, SAS 4GL http://bartekr.net | b.ratajczyk@gmail.com | MCTS, MCP
  • 4. Hierarchia ustalony porządek wg wybranego kryterium, np. ważności
  • 5. Przykłady hierarchii • schemat organizacyjny firmy • system plików • kategorie sklepu internetowego • wątki dyskusji • wykaz składników (bill of materials) • masa innych • (i innych)
  • 6. Jak to sensownie obsługiwać w bazie? • Adjacency List • Nested sets • Closure table/bridge table • Lineage column / materialized path • (inne)
  • 7. Adjacency List element rodzic A NULL B A C A D B E B F E G C H C I C
  • 8. Nested sets element lewy prawy A 1 18 B 2 9 C 10 17 D 3 4 E 5 8 F 6 7 G 11 12 H 13 14 I 15 16
  • 9. Closure table/bridge table ID element 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I rodzic dziecko 1 2 1 4 1 5 1 6 2 4 2 5 2 6 5 6 … … rodzic dziecko poziom 1 2 1 1 4 2 1 5 2 1 6 3 2 4 1 2 5 1 2 6 2 5 6 1 … … …
  • 10. Lineage column/materialized path element sciezka A A B A/B C A/C D A/B/D E A/B/E F A/B/E/F G A/C/G H A/C/H I A/C/I
  • 11. Hierarchyid • typ danych .NET • materialized path w wersji MS • wystarczy jedna kolumna do obsługi hierarchii • duże upakowanie danych • zawsze bez problemów dodasz węzeł potomny • domyślnie przeszukuje w dół hierarchii
  • 13. Metody obsługi SELECT -- statyczne hierarchyid::GetRoot(), hierarchyid::Parse('/1/2/3/4/5/'), -- dynamiczne @h.GetLevel(), @h.GetAncestor(@n), @h.GetDescendant(@m, @n), @h.IsDescendantOf(@n), @h.GetReparentedValue(@m, @n), @h.ToString() -- tylko .NET -- hierarchyid.Read() -- hierarchyid.Write()
  • 16. DEMO
  • 17. Są pewne ograniczenia • maksymalny rozmiar węzła to 892 bajty • kanoniczna reprezentacja poziomu/węzła nie dłuższa niż 14-15 znaków • chyba że mamy węzeł „z kropkami”
  • 18. Ale i zalety • zajmuje mało miejsca • wystarczy jedna kolumna do obsługi hierarchii • wygodny zestaw metod do obsługi
  • 19. Porównanie sposobów obsługi hierarchii (nie, jednak nie)
  • 20. Co zapamiętać • zajmuje niewiele miejsca • metody tylko generują identyfikator • programista robi całą robotę
  • 21. Do poczytania • Microsoft SQL Server 2008 Bible – Paul Nielsen et al. • Inside Microsoft SQL Server 2008: T-SQL Querying – Itzik Ben-Gan et al. • Joe Celko’s Trees and Hierarchies in SQL for Smarties, Second Edition – Joe Celko
  • 22. Linki • Jak może działać hierarchyid: http://www.adammil.net/blog/v100_how_the_SQL_Server_hierarc hyid_data_type_works_kind_of_.html • Przykłady porównań metod obsługi hierarchii – Bill Karwin - http://www.slideshare.net/billkarwin/models-for-hierarchical- data str. 69 lub http://www.slideshare.net/billkarwin/sql-antipatterns- strike-back str. 77 – Stackoverflow: http://stackoverflow.com/questions/4048151/what-are- the-options-for-storing-hierarchical-data-in-a-relational-database • Jedno z porównań prędkości działania obsługi hierarchii w MS SQL http://jsimonbi.wordpress.com/2011/03/01/sql-hierarchy-comparative- performance-2/ • Patent metody Davida Chandlera: http://www.google.com/patents/US6480857