Z notatnika webmasterki

21 Paź, 2009

Struktura drzewiasta w bazie danych Odc. 1

Zamieszczony przez: Joanna w: SQL

Chyba każdy programista tworzący dynamiczne strony internetowe w PHP zetknął się z problemem zaimplementowania struktury drzewiastej w bazie danych. Najczęściej ma to związek z konstrukcją menu, ale każdy serwis WWW jest właściwie o taką strukturę oparty.

Ja do niedawna konstruowałam takie struktury w oparciu o jedną tabelę rekurencyjną. Każdy rekord zawierał pole informujące wskazujące na rekord rodzica. Dla wygody stosowałam jeszcze pole ‚order’ którego wartość decydowała o kolejności elementów w sytuacji gdy jeden rodzic miał wielu potomków. Przykładowe drzewo, oraz tabela zawierająca jego dane przedstawione zostały na poniższych rysunkach:
tree_02

tree_01

Taka konstrukcja drzewa jest prosta do zaimplementowania i łatwo jest wyciągnąć informacje dotyczące potomków pierwszego rzędu mając informację o identyfikatorze rodzica. Zapytania są proste i wykonują się szybko. Bez problemu można też przenosić całe gałęzie z jednego do innego rodzica. Wymaga to tylko zmiany wartość identyfikatora rodzica w jednym rekordzie, no i ewentualnie przeliczenia wartości pola ‚order’ dla niektórych rekordów.

Niestety ten sposób ma poważne wady. Chcąc odtworzyć całe drzewo, albo wybraną gałąź trzeba wczytać wszystkie rekordy, albo skonstruować skomplikowane zapytanie a następnie przeprowadzić skomplikowane odtwarzanie struktury w skrypcie PHP. Zabierając się do mojego nowego projekty postanowiłam zgłębić temat. Natknęłam się, między innymi na stronę Huberta Lubaczewskiego (alias depesh) na której skrótowo przedstawiono tam idee różnych rozwiązań, oraz ich wady i zalety. Świetny materiał jeśli trzeba dokonać wyboru metody.

Mój wybór padł na metodę nested sets, ale o tym będę pisać w następnym artykule z tej serii.

6 komentarzy na "Struktura drzewiasta w bazie danych Odc. 1"

1 | kwiateusz

21. października 2009 o 10:13 pm

Avatar

mowisz o czyms takim? http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql

tez to implementowalem i calkiem nieźle się sprawuje :)

2 | Joanna

21. października 2009 o 11:05 pm

Avatar

Dokładnie o takim. Bardzo mi się to rozwiązanie podoba.

3 | ayeo

22. października 2009 o 9:18 am

Avatar

Witam!

Moim skromnym zdaniem lepiej zainteresować się tzw Drzewami Depesza.

4 | Joanna

22. października 2009 o 10:17 am

Avatar

To prawda, jest to interesujący sposób rozwiązania problemu. Może kiedyś go wypróbuję :)

5 | Athlan

22. października 2009 o 1:03 pm

Avatar

Coś takiego zaimplementowalem na aukcjetv.PL, z tym, ze dodalem jeszcze depth . Działa wyienicie szybko!

Formularz komentarza

Lipiec 2017
P W Ś C P S N
« Cze    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Archiwa

About

Moje notatki z pracy

Subskrypcja

Wprowadź swój adres email aby zaprenumerować ten blog i otrzymywać powiadomienia o nowych wpisach przez email.

Tematy