我正在研究一个个人项目,该项目基本上将富文本编辑器的输出保存到数据库中,以便以后可以在其他设备上再次访问它。用户可以将“页面”添加到不同章节或主题的注释中。
我遇到的问题是我无法重新排列笔记的顺序,或在某处插入新页面。我当前的解决方案是有2个ID-一个是主索引(ID),另一个是相对ID(RID)。要重新排列行,我只需更改该行的RID,然后在显示它们时按RID对行进行排序。
ID | RID | page_title | page_content
01 | 01 | Hello | Hello world
02 | 02 | Goodbye | See ya
这在我的页面很少时有效,但是如果我有100页,并且我想在中间重新排列或插入新行,则必须更改进行更改的每一行的RID 。
构造表格以使其易于重新排列或稍后插入的正确方法是什么?我熟悉使用PhpMyAdmin的MySQL和使用SQLAlchemy的SQLite。
很抱歉,如果以前已经问过这个问题,很难在Google搜索中表达该问题,我一直得到不相关的结果。预先感谢!
有很多方法可以做到这一点。一种简单的方法是将页面视为链接列表。代替[order]列,而使用prior
列指向(FK)这些页面之前的页面。
例如以a-b-c-d的顺序开始页面:
id, page name, prior
1, a, null
2, b, 1
3, c, 2
4, d, 3
5, e, 4
要将页面“ b”移动到页面“ d”之后,您将:
((1)更改c之前的1
((2)更改b在4之前]
((3)更改2之前的e
在交易中进行所有操作,您真是太棒了。新列表如下所示:
id, page name, prior
1, a, null
2, b, 4
3, c, 1
4, d, 3
5, e, 2
无论您有多少个页面,都将需要相同数量的操作(单链接列表为3)。
由于这是特例,请务必测试您移动第一页的实现(prior = null)。
我只是想到了另一种解决方案,但我不知道这可能带来什么样的缺点。