Jako vždy:neexistuje žádné nejlepší řešení. Každé řešení usnadňuje nebo ztěžuje různé věci. Správné řešení pro vás závisí na tom, kterou operaci budete nejčastěji provádět.
Naivní přístup s ID rodiče:
Výhody:
-
Snadná implementace
-
Snadné přesunutí velkého podstromu k jinému rodiči
-
Vložka je levná
-
Potřebná pole přímo přístupná v SQL
Nevýhody:
-
Načtení celého stromu je rekurzivní, a proto drahé
-
Najít všechny rodiče je také drahé (SQL nezná rekurze...)
Upravené procházení stromu předobjednávky (uložení počátečního a koncového bodu):
Výhody:
-
Získání celého stromu je snadné a levné
-
Najít všechny rodiče je levné
-
Potřebná pole přímo přístupná v SQL
-
Bonus:ukládáte také pořadí podřízených uzlů v jeho nadřazeném uzlu
Nevýhody:
- Vložení/aktualizace může být velmi nákladná, protože možná budete muset aktualizovat mnoho uzlů
Uložení cesty v každém uzlu:
Výhody:
-
Najít všechny rodiče je levné
-
Získání celého stromu je levné
-
Vkládání je levné
Nevýhody:
-
Přesun celého stromu je drahý
-
V závislosti na způsobu uložení cesty s ní nebudete moci pracovat přímo v SQL, takže ji budete muset vždy načíst a analyzovat, pokud ji budete chtít změnit.
Uzavírací tabulka
Výhody:
-
Snadná implementace
-
Najít všechny rodiče je levné
-
Vkládání je levné
-
Získávání celých stromů je levné
Nevýhody:
-
Vyžaduje další tabulku
-
Ve srovnání s jinými přístupy zabírá hodně místa
-
Přesunutí podstromu je drahé
Dávám přednost jednomu z posledních dvou, podle toho, jak často se data mění.
Viz také:http://media.pragprog.com/titles/bksqla/trees. pdf