Saltar al contenido

diseño de base de datos – categorías y subcategorías

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 IDENTITYo 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 que lft
    • Pueden aparecer inconsistencias, si un valor aparece en variosrght o lft campos
    • Pueden aparecer inconsistencias, si crea brechas
    • Pueden aparecer inconsistencias, si crea se superpone
  • 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *