Tengo que almacenar un árbol en una base de datos, entonces, ¿cuál es la mejor manera de hacerlo? Muestra el método que usas y nombra sus pros y contras. (Estoy usando SQL Server 2005)Cómo almacenar un árbol en la base de datos SQL
Respuesta
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.
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.
probar esto: Hierarchies (trees) in SQL Server 2005
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
me encontré con que una guía muy útil.
Hay dos enfoques generales
- 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
- 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 ?!
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
+1 - Acabo de usar el artículo de Celko hace unas semanas y fue muy útil. –
Los enlaces en esta respuesta lamentablemente están rotos ahora. ¿Alguien sabe dónde más encontrar esta información? – Qqwy
He hecho esto en el pasado al almacenar datos como xml en SQL.
- 1. Almacenar un HashMap en una base de datos SQL
- 2. cómo almacenar datos en la base de datos en HTML5
- 3. Almacenar en Datos de Sesión vs almacenar en Base de Datos Sql para datos temporales
- 4. ¿Cómo almacenar el directorio/jerarquía/estructura de árbol en la base de datos?
- 5. ¿Cómo se representa un árbol de datos en SQL?
- 6. ¿Cómo almacenar estructuras de árbol en Java?
- 7. ¿Cómo puedo almacenar un hash en mi base de datos?
- 8. Almacenar un objeto serializado en la base de datos MySql
- 9. ¿Cómo puedo almacenar un hash en una base de datos de SQL Server usando C#?
- 10. cómo almacenar video en la base de datos usando mysql?
- 11. ¿Qué tipo de datos es mejor para almacenar artículos en la base de datos SQL?
- 12. Forma más eficiente de almacenar un valor GUID en la base de datos SQL Server
- 13. Cómo almacenar imágenes en la base de datos SQLite
- 14. cómo almacenar valores BigInteger en la base de datos Oracle
- 15. Cómo almacenar objetos en la base de datos sqlite?
- 16. cómo almacenar contraseñas en la base de datos?
- 17. ¿Cómo almacenar Euro Symbol en la base de datos mysql?
- 18. Cómo almacenar html en una base de datos mysql
- 19. Método preferido para almacenar contraseñas en la base de datos
- 20. ¿Cómo almacenar una base de datos dentro de un Arduino?
- 21. La mejor manera de almacenar tiempos de eventos en la base de datos (My) SQL
- 22. gestión de errores elmah - almacenar en la base de datos
- 23. Esquema de la base de datos para almacenar datos SNMP
- 24. SQL DataType - ¿Cómo almacenar un año?
- 25. Almacenar una estructura de directorio en la base de datos
- 26. ¿Cómo debo almacenar cadenas cortas de texto en una base de datos SQL Server?
- 27. Rieles: almacenar traducciones en la base de datos
- 28. Consulta de datos de estructura de árbol en SQL Server
- 29. Almacenar hora de fecha UTC en la base de datos
- 30. Mejor método para almacenar Enum en la base de datos
Este enlace está muerto; redirige a la página de inicio. – Qqwy