【发布时间】:2010-09-06 11:44:47
【问题描述】:
我在数据库中有一组对象。照片库中的图像、目录中的产品、书中的章节等。每个对象都表示为一行。我希望能够对这些图像进行任意排序,并将该排序存储在数据库中,这样当我显示对象时,它们的顺序就会正确。
例如,假设我正在写一本书,每一章都是一个对象。我写我的书,并按以下顺序排列章节:
简介、可访问性、形式与功能、错误、一致性、结论、索引
它转到编辑器,然后返回以下建议的顺序:
介绍、形式、功能、可访问性、一致性、错误、结论、索引
如何以稳健、高效的方式将此排序存储在数据库中?
我有以下想法,但我对其中任何一个都不感兴趣:
-
数组。每行都有一个排序 ID,当订单发生变化时(通过删除后插入),订单 ID 会更新。这使得检索变得容易,因为它只是
ORDER BY,但它似乎很容易破解。// REMOVALUPDATE ... SET orderingID=NULL WHERE orderingID=removedIDUPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID// INSERTIONUPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionIDUPDATE ... SET orderID=insertionID WHERE ID=addedID 链接列表。每行都有一列用于排序中下一行的 id。此处的遍历似乎代价高昂,尽管可能通过某种方式使用我没有想到的
ORDER BY。间隔数组。将 orderingID(如 #1 中使用的)设置为大,因此第一个对象是 100,第二个是 200,等等。然后当插入发生时,您只需将其放置在
(objectBefore + objectAfter)/2。当然,这需要偶尔重新平衡,所以你不会让事物靠得太近(即使使用浮点数,你最终也会遇到舍入错误)。
这些对我来说都不是特别优雅。有人有更好的方法吗?
【问题讨论】:
标签: sql database django django-models