Solución:
Nested sets
son mejores para el rendimiento, si no necesita actualizaciones frecuentes o un orden jerárquico.
Si necesita actualizaciones de árbol o un orden jerárquico, es mejor usar parent-child
modelo de datos.
Se construye fácilmente en Oracle
y SQL Server 2005+
, y no tan fácilmente (pero aún posible) en MySQL
.
Yo usaría el algoritmo MPTT, Modified Preorder Tree Traversal, para este tipo de datos jerárquicos. Esto permite un gran rendimiento al atravesar el árbol y encontrar niños, si no le importa una pequeña penalización en los cambios en la estructura.
Afortunadamente, Django tiene una gran biblioteca disponible para esto, django-mptt. Lo he utilizado en varios proyectos con mucho éxito. También está django-treebeard, que ofrece varios algoritmos alternativos, pero no lo he usado (y de todos modos no parece tan popular como mptt).
Según estos artículos:
http://explainextended.com/2009/09/24/adjacency-list-vs-nested-sets-postgresql/ http://explainextended.com/2009/09/29/adjacency-list-vs-nested-sets- mysql /
“MySQL es el único sistema de los cuatro grandes (MySQL, Oracle, SQL Server, PostgreSQL) para el que el modelo de conjuntos anidados muestra un rendimiento decente y se puede considerar para almacenar datos jerárquicos”.