Mientras recreaba mi CMS, quería una alternativa al enfoque tradicional padre/hijo para gestionar la jerarquía del mapa del sitio/página. Recordaba haber visto el modelo de conjunto anidado hace un tiempo, pero no recordaba cómo se llamaba. Por lo tanto, me encontré con un enfoque similar que quiero evaluar y comparar las propiedades, asegurándome de que no me toparé con limitaciones estúpidas más adelante porque no fui con lo que ya está probado en el tiempo. Por lo tanto, indique si A) ya se inventó (¿cómo se llama?), B) si hay defectos fundamentales en las propiedades, o C) es un buen enfoque (¡por favor, dé una buena justificación!).Mi alernative a conjuntos anidados para conjuntos de datos jerárquicos de profundidad arbitraria: ¿Bueno o malo?
Considere esta lista:
- Inicio
- Sobre Nosotros
- Contáctenos
- Productos
- Ropa
- Libros
- Electrónica
- Knowledge Base
- Otras cosas
Bajo el modelo de conjunto anidado, creo que almacena los/descriptores de izquierda y derecha para cada nodo con un recorrido en profundidad:
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
Y aquí está mi "manera incorrecta" de empezar a gustarme mejor:
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
En lugar de un par de izquierda/derecha, estoy almacenando ID y LAST_CONTAINED_ID. He encontrado que muchas de las propiedades son los mismos (o muy similar):
- El nodo raíz es ID = 1
- Por "hojas", ambas propiedades son iguales, mientras que con ramas, no son
- el número total de "subnodos" para cualquier nodo dado es LAST_CONTAINED_ID - ID
- Todo contenida nodos tienen un ID> ID del contenedor, pero < = LAST_CONTAINED_ID del contenedor
- los nodos antepasado tienen un ID < el niño ID , pero también un LAST_CONTAINED_ID> = la identificación del niño
- La profundidad es la suma del ancestro nodos
Además, el ID sirve un, identificador único de orden específico (sin espacios!). También me resultó más fácil almacenar las referencias DEPTH y PARENT por simplicidad, pero eso es más o menos lo mismo para los juegos anidados según lo que entiendo.
Entonces, ¿esto cuenta como un conjunto anidado? ¿Y ya es un enfoque común (pero por qué no había oído hablar de él antes ...)? ¿Hay una buena razón por la que debería usar un verdadero conjunto anidado sobre esto?
Espero sus comentarios.
Para su información, el modelo de conjunto anidado es una forma de tener una sola tabla en un RDBMS almacenar toda la información necesaria para una jerarquía de una profundidad desconocida (es decir, una lista infinita sin recurrencia): http://en.wikipedia.org/wiki/Nested_set_model#Example – landons