我的问题很简单。我需要创建代表有序列表元素的模型。这个模型可以这样实现:
class Item(models.Model):
data = models.TextField()
order = models.IntegerField()
或者像这样:
class Item(models.Model):
data = models.TextField()
next = models.ForeignKey('self')
首选什么方式?每种解决方案都有哪些缺点?
最佳答案
本质上,您提出的第二个解决方案是链表。在数据库级别实现的链表通常不是一个好主意。要检索 n
元素的列表,您需要访问 n
数据库(或使用复杂的查询)。在性能方面,在 O(n) 中检索列表非常低效。
在常规代码中,与数组相比,链表用于获得更好的插入性能(无需移动所有元素)。在您的数据库中,仅通过 2 个查询更新所有元素并不那么复杂:
UPDATE item.order = item.order + 1 FROM item WHERE order > 3
INSERT INTO item (order, ...) VALUES (3, ...)
我记得看到一个可重用的应用程序实现了所有这些和一个漂亮的管理界面,但我现在找不到它......
总而言之,绝对使用解决方案 #1 并远离解决方案 #2,除非你有非常非常好的理由不这样做!
关于python - django 中的有序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/428149/