Czy mi się przyda hierarchyid?

22
Czy mi się przyda hierarchyid? 80. spotkanie PLSSUG Warszawa, 09.10.2014.

description

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

Transcript of Czy mi się przyda hierarchyid?

Page 1: Czy mi się przyda hierarchyid?

Czy mi się przyda hierarchyid?

80. spotkanie PLSSUG Warszawa, 09.10.2014.

Page 2: Czy mi się przyda hierarchyid?

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

Page 3: Czy mi się przyda hierarchyid?

O mnie

Bartosz Ratajczyk

programista baz danych(i aplikacji)

czasem też administrator

PHP, JS, C#, T-SQL, SAS 4GL

http://bartekr.net | [email protected] | MCTS, MCP

Page 4: Czy mi się przyda hierarchyid?

Hierarchia

ustalony porządek wg wybranego kryterium, np. ważności

Page 5: Czy mi się przyda hierarchyid?

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)

Page 6: Czy mi się przyda hierarchyid?

Jak to sensownie obsługiwać w bazie?

• Adjacency List

• Nested sets

• Closure table/bridge table

• Lineage column / materialized path

• (inne)

Page 7: Czy mi się przyda hierarchyid?

Adjacency List

element rodzic

A NULL

B A

C A

D B

E B

F E

G C

H C

I C

Page 8: Czy mi się przyda hierarchyid?

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

Page 9: Czy mi się przyda hierarchyid?

Closure table/bridge tableID 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

… … …

Page 10: Czy mi się przyda hierarchyid?

Lineage column/materialized path

elementsciezkaA AB A/BC A/CD A/B/DE A/B/EF A/B/E/FG A/C/GH A/C/HI A/C/I

Page 11: Czy mi się przyda hierarchyid?

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

Page 12: Czy mi się przyda hierarchyid?

Hierarchyid

Page 13: Czy mi się przyda 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()

Page 14: Czy mi się przyda hierarchyid?

Indeksy

Depth first

Page 15: Czy mi się przyda hierarchyid?

Indeksy

Breadth first

Page 16: Czy mi się przyda hierarchyid?

DEMO

Page 17: Czy mi się przyda hierarchyid?

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”

Page 18: Czy mi się przyda hierarchyid?

Ale i zalety

• zajmuje mało miejsca

• wystarczy jedna kolumna do obsługi hierarchii

• wygodny zestaw metod do obsługi

Page 19: Czy mi się przyda hierarchyid?

Porównanie sposobówobsługi hierarchii

(nie, jednak nie)

Page 20: Czy mi się przyda hierarchyid?

Co zapamiętać

• zajmuje niewiele miejsca

• metody tylko generują identyfikator

• programista robi całą robotę

Page 21: Czy mi się przyda hierarchyid?

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

Page 22: Czy mi się przyda hierarchyid?

Linki

• Jak może działać hierarchyid: http://www.adammil.net/blog/v100_how_the_SQL_Server_hierarchyid_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