Hola, descubrimos la respuesta a lo que andabas buscando, deslízate y la obtendrás un poco más abajo.
Solución:
Yo usaría esta estructura:
ParentId, CategoryId, Title
null, 1, Home
null, 2, Business
null, 3, Hobbies
1, 4, Gardening
1, 5, Kitchen
1, 6, ...
2, 7, Development
2, 8, Marketing
2, 9, ...
3, 10, Soccer
3, 11, Reading
3, 12, ...
En detalle:
- solo usa una tabla, que se hace referencia a sí mismopara que pueda tener una profundidad ilimitada de categorías
- usar identificadores técnicos (usando
IDENTITY
o similar), para que puedas tener más de 10 subcategorías - si es necesario agregue un legible por humanos columna para los números de categoría como campo separado
Siempre que solo use dos niveles de categorías, aún puede seleccionar así:
SELECT BizTitle FROM tblBiz WHERE ParentId = 3 AND CategoryId = 11
El nuevo hierarchyid
La característica del servidor SQL también parece bastante prometedora: https://msdn.microsoft.com/en-us/library/bb677173.aspx
Lo que no me gusta de la Modelo de conjunto anidado:
- Insertar y borrar artículos en el Modelo de conjunto anidado es algo bastante complicado y requiere cerraduras costosas.
- Uno puede crear fácilmente inconsistencias que está prohibido, si utiliza el
parent
campo en combinación con un extranjero key restricción.- Pueden aparecer inconsistencias, si
rght
es más bajo quelft
- Pueden aparecer inconsistencias, si un valor aparece en varios
rght
olft
campos - Pueden aparecer inconsistencias, si crea brechas
- Pueden aparecer inconsistencias, si crea se superpone
- Pueden aparecer inconsistencias, si
- los Modelo de conjunto anidado es en mi opinión más complejo y por lo tanto no tan fácil de entender. Esto es absolutamente subjetivo, por supuesto.
- los Modelo de conjunto anidado requiere dos campos, en lugar de uno, por lo que utiliza más espacio en disco.
La gestión de datos jerárquicos tiene algunas formas. Uno de los más importantes es Nested Set Model
. Ver aquí para la implementación. Incluso algunos sistemas de gestión de contenidos como Joomla, utilizan esta estructura.
Actualización 2020: Como hay algunas consideraciones en esta publicación, debo decir que ahora prefiero el Modelo de lista de adyacencia en lugar del Modelo de conjunto anidado ya que hay menos complejidad de esta manera. También Ver aquí para la implementación.
recomiendo ir con Opción 1 – mantener la subcategoría única dentro de la categoría. Digamos que tengo dos categorías de elementos no relacionados:
- frutas
- Colores
Para cada quiero una subcategoría
-
frutas
- Manzana
- Naranja
-
Colores
- Blanco
- Naranja
Tenga en cuenta que Orange es una subcategoría dentro de cada categoría. Aunque el nombre es el mismo, su función es muy diferente. (No entremos en la posibilidad de que la fruta naranja sea de color naranja)
Con este diseño, si alguien cambia de opinión y quiere renombrar Orange a Oranges, bien. Es fácil cambiar sin afectar la subcategoría Naranja en Colores.
Si su interfaz de usuario está construida de tal manera que Marketing puede controlar subcategorías de Colores mientras que Producción puede controlar subcategorías de Frutas, este diseño permitirá que Marketing trabaje con sus subcategorías sin pasar por encima de las subcategorías de Producción.
Reseñas y valoraciones de la guía
Recuerda comunicar este ensayo si lograste el éxito.