当前位置:  开发笔记 > 后端 > 正文

表示在关系数据库中的排序

如何解决《表示在关系数据库中的排序》经验,为你挑选了1个好方法。

我在数据库中有一组对象.照片库中的图像,目录中的产品,书中的章节等.每个对象都表示为一行.我希望能够任意地对这些图像进行排序,将这种排序存储在数据库中,这样当我显示对象时,它们的顺序就会正确.

例如,假设我正在写一本书,每一章都是一个对象.我写了我的书,并按以下顺序列出章节:

简介,可访问性,表单与功能,错误,一致性,结论,索引

它转到编辑器,并返回以下建议的顺序:

简介,表格,功能,可访问性,一致性,错误,结论,索引

如何以强大,高效的方式将此排序存储在数据库中?

我有以下想法,但我对其中任何一个都不感兴趣:

    阵列.每行都有一个订单ID,当订单更改时(通过删除后插入),订单ID会更新.这使得检索变得简单,因为它只是ORDER BY,但它似乎很容易打破.

    // REMOVAL
    UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
    UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
    // INSERTION
    UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
    UPDATE ... SET orderID=insertionID WHERE ID=addedID

    链接列表.每行都有一列用于排序中下一行的id.遍历在这里似乎很昂贵,尽管可能通过某种方式使用ORDER BY我没有想到的.

    间隔阵列.将orderingID(在#1中使用)设置为大,因此第一个对象是100,第二个是200,等等.然后当插入发生时,你只需将它放在(objectBefore + objectAfter)/2.当然,这需要偶尔重新平衡,所以你没有太紧密的东西(即使有花车,你最终会遇到舍入误差).

这些对我来说都不是特别优雅.有没有人有更好的方法呢?



1> Grey Panther..:

另一种替代方法是(如果您的RDBMS支持它)使用类型为array的列.虽然这打破了规范化规则,但在这种情况下它可能很有用.我知道有一个数组的数据库是PostgreSQL.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有