请教一个关于数据库设计的问题

2013-11-11 15:25:41 +08:00
 humiaozuzu
有一个壁纸的 app,壁纸的表里面存储了壁纸的id,分类id 等

现在有一个需求,第一个是做一个每日更新,每日最热这样,我现在用一个表单独存储他们,类似 new_wallpaper ,有id, wallpaper_id, order,问题来了,编辑这边需要修改他们的顺序,比如把最新的一张放到中间之类的,我在数据库中用的是连续的 order 保存的位置,一旦他们这么修改,有一半的项也要跟着改 order 的值,有没有什么更好的设计方法吗?
2501 次点击
所在节点    问与答
15 条回复
humiaozuzu
2013-11-11 15:47:30 +08:00
果然还是技术话题沉得快。。。
lichao
2013-11-11 15:52:10 +08:00
order 并不要求一定是 unique 的,order 是可以重复的,所以你说的 {有一半的项也要跟着改 order 的值} 是不需要的。
min
2013-11-11 15:54:45 +08:00
貌似你的问题是你用order的方式和编辑用的方式有冲突
这很简单啊,再加一个Bianji'sOrder字段进去就好了嘛,皆大欢喜
humiaozuzu
2013-11-11 16:01:31 +08:00
@lichao 重复的话就到不了我要求的位置,比如有多个 order 都是1

@min 再加个字段还是会有一样的问题,以及 2 个 order 的混排也是问题
min
2013-11-11 16:05:29 +08:00
连续有那么重要吗,不连续服务器会爆炸吗
你可以把order的初始值设计成有间隔的嘛,比如从1开始,第二个是10001,第三个是20001,第四个是30001。。。
alexrezit
2013-11-11 16:10:56 +08:00
不知道为什么突然想到链表了...
alexrezit
2013-11-11 16:11:33 +08:00
Order 为什么不能是 timestamp 呢?
lichao
2013-11-11 16:12:15 +08:00
好嘛,order 也可以是小数,这样 1.0、2.0、3.0、4.0、5.0 中间可以随意插入 N 个数了
humiaozuzu
2013-11-11 16:25:35 +08:00
@alexrezit 因为编辑需要改顺序。。。

@min 10000 的话,比如我选10张插入到1-10001 中间,第一次插入的 order 改为 5000,第二次的 2500,第三次的 1250,修改的卡片数量一多一样有开始的问题


@lichao 目前 api 分页中传的 max_id 是 order,如果把他们换成小数,客户端可能会有问题
alexrezit
2013-11-11 16:28:28 +08:00
@humiaozuzu
我觉得还不如就按现在这样... 虽然性能差点吧但至少不会让人强迫症发作...
kyze8439690
2013-11-11 16:31:20 +08:00
帮顶
min
2013-11-11 16:32:05 +08:00
@humiaozuzu 意思是10000不够咯? 100w够不够啊?
humiaozuzu
2013-11-11 17:01:05 +08:00
@min 那你干脆说用 21474836 好了
justfindu
2013-11-11 17:03:29 +08:00
其实修改order为啥一定要修改后续的所有的值的order呢~ 你既然是每日最热~ 那肯定每次出来都是一个 每日的group 只要这个之内能够order正确就可以了啊
yushiro
2013-11-11 17:08:10 +08:00
order字段在UI调整的时候,不要直接修改值, 而是把2个条目的order字段值交换。
再配合上面说的各种方法, 比如每个order间隔100(100,200,300这样排)
再极端点, 如果中间插了超过100个新纪录, 直接update旧order纪录*100, 这样总没问题了吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88853

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX