Django - 处理树形结构
我在使用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)
我想给Entity模型(顺便说一下,也包括Person)添加层级功能。
我有个问题:考虑到我更看重系统的稳定性和易于维护,而不是超快的查询速度(不过,如果在大约2000个叶子和节点的Entity中查询速度太慢,那也是不行的),你推荐哪种实现方式呢?
1) 在SQL数据库中实现一个嵌套集合的层级树,通过正常的字段操作来访问;或者
2) 在Django外部实现一个常规的Python树(比如Node类),通过Django模型的方法来访问层级信息?
谢谢,
Mike
1 个回答
2
我觉得你提到的选择其实并不是完全对立的——无论你最后选择什么,都会涉及到一些数据库的内容和一些非数据库的内容。
我非常喜欢“修改过的先序树遍历”算法,它在Django中的实现也很棒,叫做 django-mptt。
不过,如果你真的想用嵌套集合的话,可以看看 django-treebeard,它提供了嵌套集合、邻接列表和物化路径等功能。