我正在使用Django以下(简化)模型:
class Entity(models.Model):
name = models.CharField(max_length=30)
class Person(models.Model):
last_name = models.CharField(max_length=30)
first_name = models.CharField(max_length=30)
entity = models.ForeignKey(Entity)
我想将层次结构功能添加到实体模型(并且,通过扩展,添加到Person)。
问题:你推荐哪种实现方式,因为我支持系统稳定性和易于维护而不是尖叫 - 快速查询速度(尽管〜2000叶子和节点实体的查询速度不可接受会很糟糕)。
1)将层次树实现为SQL数据库中的嵌套集,通过正常的字段操作进行访问;或
2)在Django之外实现层次树作为常规Python树(例如Node类),通过Django模型方法访问层次结构信息?
谢谢,
麦克
答案 0 :(得分:2)
我不认为您的替代方案是真正相互排斥的 - 您最终做的任何事情都会有一些数据库和一些非数据库元素。
我非常喜欢Modified Preorder Tree Traversal算法及其出色的Django实现django-mptt。
如果您在嵌套集上已经设置了,请查看django-treebeard,它提供了相邻列表和物化路径。