Successfully reported this slideshow.

Czy mi się przyda hierarchyid?

1

Share

Loading in …3
×
1 of 22
1 of 22

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

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

×