Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Hierarchiczne dane w relacyjnych bazach

Witam,

Interesuje mnie w jaki sposób organizujecie w swoich projektach przechowywanie hierarchicznych struktur danych w bazie?
Przyjmijmy że jako hierarchiczną strukturę rozumiem tutaj zwykłe drzewo z dowolną liczbą dzieci, nieograniczone na wysokość.

Czego używacie do przechowywania takiego drzewa? Nested Sets, "drzewka IP", coś innego? :-)
Jeśli macie własne rozwiązania, jak takie struktury zachowują się u was przy dużej ilości rekordów (duża >> 100 000) ?

konto usunięte

Temat: Hierarchiczne dane w relacyjnych bazach

http://www.wss.pl/SQLServer/Articles/9641.aspx

na samym dole ;)
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Hierarchiczne dane w relacyjnych bazach

Nieźle! Nie wiedziałem że zaimplementowali strukturę hierarchiczną jako część T-SQL :-)

Tylko tutaj pojawia się problem z przenośnością - bo to nie jest w standardzie SQL'a. Napiszemy kod dla T-SQL a później się okaże że projekt nie będzie śmigać na innej bazie, bo nie ma takiego typu danych jak "HierarchicalData".

1. Czy są jeszcze jakieś inne dialekty SQL które mają wbudowany typ podobny do HierarchicalData z T-SQL'a?
2. Co ze standardowym SQL? Naprawdę nikt nie dorzuci nic więcej?:-)

Edit:
Robert, czy testowałeś to rozwiązanie (HierarchicalData z T-SQL) dla większej ilości danych i dużej ilości jednoczesnych zapytań? Masz jakieś doświadczenia?Przemek Szalko edytował(a) ten post dnia 09.04.08 o godzinie 19:25
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Hierarchiczne dane w relacyjnych bazach

Temat wałkowany lata temu ;-) Zajrzyj na http://www.dbf.pl/faq/tresc.html?rozdzial=1#o1_9Paweł Grzegorz Kwiatkowski edytował(a) ten post dnia 09.04.08 o godzinie 21:59
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Hierarchiczne dane w relacyjnych bazach

No tak, hm... To nic się od tego czasu nie zmieniło?:-))
Katarzyna B.

Katarzyna B. Oracle DBA

Temat: Hierarchiczne dane w relacyjnych bazach

Przemek Szalko:
No tak, hm... To nic się od tego czasu nie zmieniło?:-))

mozesz jeszcze ewentualnie pomyslec o LDAPie ...
Marcin B.

Marcin B. Kierownik Salonu

Temat: Hierarchiczne dane w relacyjnych bazach

Możesz np. zorganizować sobie podwiązania do rodzica przyjmując, że najwyższy poziom to 0 itd. Na logike bez ograniczen. Na razie stosuje ten sposob raczej w malych strukturach i sprawdza sie. Jak działa przy dużych nie wiem. Na pewno jest łatwe do zaimplementowania wszędzie.

konto usunięte

Temat: Hierarchiczne dane w relacyjnych bazach

Przemek Szalko:
Witam,

Interesuje mnie w jaki sposób organizujecie w swoich projektach przechowywanie hierarchicznych struktur danych w bazie?
Przyjmijmy że jako hierarchiczną strukturę rozumiem tutaj zwykłe drzewo z dowolną liczbą dzieci, nieograniczone na wysokość.

Czego używacie do przechowywania takiego drzewa? Nested Sets, "drzewka IP", coś innego? :-)
Jeśli macie własne rozwiązania, jak takie struktury zachowują się u was przy dużej ilości rekordów (duża >> 100 000) ?

Albo Apache Jackrabbit http://jackrabbit.apache.org , jeśli brałbyś pod uwagę Java.Paweł Grotowski edytował(a) ten post dnia 10.04.08 o godzinie 22:00

konto usunięte

Temat: Hierarchiczne dane w relacyjnych bazach

Na trzymanie drzewa danych w bazie i szybki dostęp do danych są dwa sposoby. Trzyma się ścieżkę - i to nazywa się persistent path. Można też sprytnie poindeksować wierzchołki - to nazywa się nested-indices, albo nested-indexes - zależy kto pisze... To drugie rozwiązanie niektóre silniki mają wbudowane np. Oracle. W Postgresie jest contrib - ltree - używa indeksu GISowego i jest to bardzo szybkie. Wszystko jest opisane na FAQ grupy dyskusyjnej pl.comp.bazy-danych: http://www.dbf.pl/faq/tresc.html?rozdzial=1#o1_9
Marcin B.

Marcin B. Kierownik Salonu

Temat: Hierarchiczne dane w relacyjnych bazach

Mimo wszystko upierałbym się przy rozwiązaniu autorskim. Masz wtedy nad tym pełną kontrolę. Mechanizmy wbudowane są niezłe, ale zawsze istnieje jakieś małe, ale które po implementacji może okazać się na tyle niewygodne, że zaczynasz kombinować od nowa i tracisz czas. Przemyśl problem. Stwórz coś własnego i to kontroluj, zmiany też sobie łatwo zaimplementujesz.
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Hierarchiczne dane w relacyjnych bazach

Marcin B.:
Mimo wszystko upierałbym się przy rozwiązaniu autorskim. Masz wtedy nad tym pełną kontrolę. Mechanizmy wbudowane są niezłe, ale zawsze istnieje jakieś małe, ale które po implementacji może okazać się na tyle niewygodne, że zaczynasz kombinować od nowa i tracisz czas. Przemyśl problem. Stwórz coś własnego i to kontroluj, zmiany też sobie łatwo zaimplementujesz.

W sumie nie mam aktualnie żadnego problemu do rozwiązania, a przy rozwiązywaniu wcześniejszych korzystałem z kilku wymienionych wyżej "struktur" (nested sets, persistent path).

Pytanie było teoretyczne, ale o praktykę :-)
Chciałem dowiedzieć się jakie wy wypracowaliście techniki radzenia sobie z takimi zadaniami.
Za jakiś czas postaram się zebrać wszystkie rozwiązania w małym podsumowaniu, coby zostało dla potomnych :-)

Macie może jeszcze jakieś autorskie lub nie wymienione tutaj sposoby na hierarchiczne dane w relacyjnych bazach?
Tomasz Sapletta

Tomasz Sapletta JAVA, PHP, NodeJS,
JS, Python | Full
Stack Developer |
DE...

Temat: Hierarchiczne dane w relacyjnych bazach

w necie już dużo metod, poznałem co najmniej 5, wypracowałem swoją, ale to już zależy od tego, jaka wydajność i złożoność Ciebie interesuje, regułą jest, że skomplikowane rozwiązania są najwydajniejsze. Ludzie piszą na temat hierarchicznego przechowywania danych prace magisterskie, choćby tutaj: http://tools.kosyl.org/homemedia/doc/mgr.pdf
Adam O.

Adam O. Bazy danych etc

Temat: Hierarchiczne dane w relacyjnych bazach

Tak jak koledzy napisali - temat w bazach rozwiązywany na wiele sposobów. Jeżeli dane hierarchiczne o takiej samej strukturze dla każdego wierzchołka to najczęściej wystarczają zapytania rekurencyjne i odpowiednie indeksowanie tak jak to Ci zasugerowano wcześniej - słowa kluczowe do googlowania: UNION ALL, CONNECT BY, hierarchical queries, common table expression, np: http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.j....
Z dedykowanych rozwiązań, niektóre silniki mają specjalny typ hierarchiczny (link do T-SQLa był, ja podaję do Informixa http://publib.boulder.ibm.com/infocenter/idshelp/v117/...
Prawie każda baza obsługuje już w jakiś sposób typ XML, więc jeżeli dane na różnych poziomach mają różną strukturę, to chyba się tego nie uniknie:
http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.j...
http://publib.boulder.ibm.com/infocenter/idshelp/v117/...
Masz cztery kategorie problemów, i w dużym uproszczeniu ja bym robił to tak:
1. Mało danych, prosta struktura - common table expression + UNION ALL/CONNECT BY
2. Mało danych, skomplikowana struktura - po stronie aplikacji albo własna "magia" w procedurach składowanych, ostatecznie XML (ale naprawdę ostatecznie)
3. Dużo danych, prosta struktura - dedykowany typ hierarchiczny
4. Dużo danych, skomplikowana struktura - XML, niekoniecznie po stronie bazy (ale ja bym robił w bazie, żeby trollować programistów;) )

Oczywiście każdy przypadek jest inny, i oczywiście zastrzegam sobie prawo do bycia i upartego trwania w błędzie;)

konto usunięte

Temat: Hierarchiczne dane w relacyjnych bazach

http://www.eioba.pl/a/1jj0/drzewa-w-sql

sprawdziłem sposób z dodatkową tabelą

zrobiłem w ten sposób np. korekty faktur (obraz po korekcie) i strukturę organizacyjną firmySebastian Krajewski edytował(a) ten post dnia 10.08.12 o godzinie 12:38

Temat: Hierarchiczne dane w relacyjnych bazach

Witam
Lekko odświeżam temat. Mam projekt by zbudować drzewo oparte na przełącznikach. Według
wszystkich dotychczasowych metod mogę jedynie kontrolować kolejność wyświetlania dzieci danego rodzica. W tym projekcie potrzebuje relacji portów.
Np. na danym przełączniku mogę mieć taką sytuacje:
port1 -> Host1
port2 -> Null
port3 -> Null
port4 -> Host2
port5 -> uplink

Jak to ująć w bazie?
Dzięki

Następna dyskusja:

[ORACLE] Hierarchiczne dane




Wyślij zaproszenie do