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

Listopad 2017
P W Ś C P S N
« Lip    
 12345
6789101112
13141516171819
20212223242526
27282930  

Archiwa

About

Moje notatki z pracy

Subskrypcja

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

Dołącz do 25 pozostałych subskrybentów

Tematy