我如何以可以随时重新排列它们的顺序的方式来构造数据库表?

问题描述 投票:0回答:2

我正在研究一个个人项目,该项目基本上将富文本编辑器的输出保存到数据库中,以便以后可以在其他设备上再次访问它。用户可以将“页面”添加到不同章节或主题的注释中。

我遇到的问题是我无法重新排列笔记的顺序,或在某处插入新页面。我当前的解决方案是有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搜索中表达该问题,我一直得到不相关的结果。预先感谢!

mysql database insert structure flask-sqlalchemy
2个回答
1
投票

有很多方法可以做到这一点。一种简单的方法是将页面视为链接列表。代替[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)。


0
投票

我只是想到了另一种解决方案,但我不知道这可能带来什么样的缺点。

© www.soinside.com 2019 - 2024. All rights reserved.