Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 m...
O mnie 
Bartosz Ratajczyk 
programista baz danych 
(i aplikacji) 
czasem też administrator 
PHP, JS, C#, T-SQL, SAS 4GL 
h...
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 
...
Jak to sensownie obsługiwać w bazie? 
• Adjacency List 
• Nested sets 
• Closure table/bridge table 
• Lineage column / ma...
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...
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...
Hierarchyid 
• typ danych .NET 
• materialized path w wersji MS 
• wystarczy jedna kolumna do obsługi hierarchii 
• duże u...
Hierarchyid
Metody obsługi 
SELECT 
-- statyczne 
hierarchyid::GetRoot(), 
hierarchyid::Parse('/1/2/3/4/5/'), 
-- dynamiczne 
@h.GetLe...
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ż ...
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 
Queryi...
Linki 
• Jak może działać hierarchyid: 
http://www.adammil.net/blog/v100_how_the_SQL_Server_hierarc 
hyid_data_type_works_...
Upcoming SlideShare
Loading in …5
×

Czy mi się przyda hierarchyid?

426 views

Published on

Prezentacja na 80. spotkaniu warszawskiej grupy PLSSUG nt. hierarchyid - typu danych do obsługi danych hierarchicznych

Published in: Technology
  • Be the first to comment

Czy mi się przyda hierarchyid?

  1. 1. Czy mi się przyda hierarchyid? 80. spotkanie PLSSUG Warszawa, 09.10.2014.
  2. 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. 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. 4. Hierarchia ustalony porządek wg wybranego kryterium, np. ważności
  5. 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. 6. Jak to sensownie obsługiwać w bazie? • Adjacency List • Nested sets • Closure table/bridge table • Lineage column / materialized path • (inne)
  7. 7. Adjacency List element rodzic A NULL B A C A D B E B F E G C H C I C
  8. 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. 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. 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. 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
  12. 12. Hierarchyid
  13. 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()
  14. 14. Indeksy Depth first
  15. 15. Indeksy Breadth first
  16. 16. DEMO
  17. 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. 18. Ale i zalety • zajmuje mało miejsca • wystarczy jedna kolumna do obsługi hierarchii • wygodny zestaw metod do obsługi
  19. 19. Porównanie sposobów obsługi hierarchii (nie, jednak nie)
  20. 20. Co zapamiętać • zajmuje niewiele miejsca • metody tylko generują identyfikator • programista robi całą robotę
  21. 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. 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

×