Podczas odtwarzania mojego CMS chciałem alternatywę dla tradycyjnego podejścia rodzic/dziecko do zarządzania hierarchią mapy/strony. Pamiętałem, jak jakiś czas temu zobaczyłem zagnieżdżony model, ale nie mogłem sobie przypomnieć, jak się nazywało. Tak więc natknąłem się na podobne podejście, które chcę ocenić i porównać z właściwościami, upewniając się, że później nie będę narażony na głupie ograniczenia, ponieważ nie poszedłem na to, co już zostało przetestowane. Tak więc, proszę doradzić, jeśli A) zostało już wynalezione (jak to się nazywa ?!), B) istnieją zasadnicze wady właściwości lub C) jest to dobre podejście (proszę podać dobre uzasadnienie!).Moje alernatywne do zestawów zagnieżdżonych dla hierarchicznych zestawów danych o dowolnej głębokości: Dobra lub Zła?
Rozważmy tę listę:
- Home
- O nas
- Kontakt
- Produkty
- Odzież
- Książki
- Electronics
- Baza wiedzy
- Inne rzeczy
Pod model zbiorów zagnieżdżonych, wierzę, można przechowywać w lewo/prawo deskryptory dla każdego węzła o głębokości pierwszego przechodzenia:
Home 1-18
About Us 2-3
Contact Us 4-5
Products 6-13
Clothing 7-8
Books 9-10
Electronics 11-12
Knowledge Base 14-15
Other stuff 16-17
Oto moja "zła droga", którą zaczynam lubić:
Home 1-9
About Us 2-2
Contact Us 3-3
Products 4-7
Clothing 5-5
Books 6-6
Electronics 7-7
Knowledge Base 8-8
Other stuff 9-9
Zamiast pary lewej/prawej przechowuję identyfikator i LAST_CONTAINED_ID. Okazało się, że wiele z tych właściwości są takie same (lub bardzo podobne):
- Węzeł główny jest ID = 1
- Na „liście”, zarówno właściwości są równe, natomiast z oddziałów, nie są one
- całkowita liczba „podwęzłów” dla danego węzła jest LAST_CONTAINED_ID - ID
- Wszystkie zawarte węzły mają identyfikator> ID kontenera, ale < = LAST_CONTAINED_ID kontenera
- węzły przodek mieć identyfikator < dziecka ID , ale także LAST_CONTAINED_ID> = identyfikator podrzędny
- Głębokość jest sumą przodka węzłów
Dodatkowo, ID służy do konkretnego zamówienia, unikalny identyfikator (bez luk!). Zauważyłem, że łatwiej jest przechowywać referencje DEPTH i PARENT dla uproszczenia, ale to samo dotyczy zestawów zagnieżdżonych z tego, co rozumiem.
Czy to jest liczone jako zestaw zagnieżdżony? I czy to już jest wspólne podejście (ale dlaczego wcześniej o tym nie słyszałem ...)? Czy istnieje dobry powód, dla którego powinienem używać w tym celu zestawu zagnieżdżonego?
Witam Twoje myśli.
FYI, model zestawu zagnieżdżonego jest sposobem posiadanie pojedynczej tabeli w magazynie RDBMS wszystkich informacji potrzebnych dla hierarchii o nieznanej głębokości (tj. nieskończonej liście bez rekursji): http://pl.wikipedia.org/wiki/Nested_set_model#Przykład – landons