2010-07-09 23 views

Respuesta

11

Encontré la discusión en el SQL Anti-patterns muy útil, ya que también se centra en los inconvenientes de cada implementación.

Además, las diapositivas 48-77 en this presentation reiteran ese análisis.

En pocas palabras, no existe un árbol genérico ni una bala de plata para los árboles de SQL. Tendrá que preguntarse acerca de los datos, cómo y cuánto se seleccionarán, modificarán, se moverán las ramas, etc., y en función de esas respuestas implementarán una solución adecuada.

3

Bueno, la manera más fácil sería que un registro tenga una columna ParentID para que sepa qué registro es su principal. Esta es una práctica bastante estándar. Por ejemplo, una tienda en línea podría tener una jerarquía de categorías de productos. Cada categoría tendrá un ParentID. Ejemplo: la categoría "Jeans" en una base de datos de ropa podría tener "Pantalones" como categoría principal. Es un poco más difícil si desea que un registro indique cuáles son sus hijos, a menos que restrinja el número de hijos. Si desea un árbol binario, podría tener columnas LeftChildID y RightChildID. Si permite cualquier número de hijos, podría tener una columna Niños con ID delimitados por comas (como 1,4,72,19), pero eso dificultará las consultas. Si su base de datos permite tipos de matrices en columnas, probablemente pueda utilizar una matriz en lugar de una cadena delimitada, lo que sería fácil de consultar, pero no estoy seguro de si MS SQL Server admite eso o no.

Aparte de eso, depende del tipo de datos que está modelando y también del tipo de operaciones que planea hacer con este árbol.

2

Hay dos enfoques generales

  1. En cada registro, almacenar el ID de la matriz en una columna anulable (la raíz del árbol no tiene padre) anidada técnica de modelo de conjunto
  2. Uso de Joe Celko explicó here y (gracias al comentario de @onedaywhen), también en lo que es la fuente original here

EDIT: nuevo enlace para este material es here.

Pros y contras ?? !! Estás bromeando, verdad ?!

+0

Celko atribuye el modelo de conjunto anidado a Michael Kamfonas, aunque Celko parece haber acuñado la frase y ciertamente pulió y popularizó la técnica. – onedaywhen

+0

+1 - Acabo de usar el artículo de Celko hace unas semanas y fue muy útil. –

+0

Los enlaces en esta respuesta lamentablemente están rotos ahora. ¿Alguien sabe dónde más encontrar esta información? – Qqwy

1

He hecho esto en el pasado al almacenar datos como xml en SQL.

Cuestiones relacionadas