我知道这有点违背关系数据库的原则,但让我来描述一下情况。
我有一个页面,用户将放置一些项目。
________________
| -Item1 |
| -Item2 |
| -Item3 |
| -Item4 |
|________________|
这些项目必须按照用户给它们的顺序保持。但是这个顺序可以被用户改变任意次数。
________________
| -Item1 |
| -Item4 |
| -Item2 |
| -Item3 |
|________________|
进场1
我最初的想法是给这些项目一个索引来表示它们在列表中的位置
Page Item
----------- ---------------
FK | pid FK | pid
| name PK | iid
| index
| content
有了这个解决方案,您可以选择项目 where pid = Page.pid
和 order by index
,这是方便的。然而,每次你改变顺序,你必须改变其他项目(最好的情况)和所有其他项目(最坏的情况)之间的任何地方。
进场二
我还考虑过创建一个类似于数据结构的“链表”,其中每个项目都指向列表中的下一个项目。
Page Item
----------- ---------------
FK | pid FK | pid
| name PK | iid
| next
| content
这可能会降低更改订单的成本,但是我们必须依靠前端编程来提取订单。
有我没想到的方法吗? 请告诉我。