V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
humiaozuzu
V2EX  ›  问与答

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

  •  
  •   humiaozuzu · 2013-11-11 15:25:41 +08:00 · 2573 次点击
    这是一个创建于 4058 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个壁纸的 app,壁纸的表里面存储了壁纸的id,分类id 等

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

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

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


    @lichao 目前 api 分页中传的 max_id 是 order,如果把他们换成小数,客户端可能会有问题
    alexrezit
        10
    alexrezit  
       2013-11-11 16:28:28 +08:00
    @humiaozuzu
    我觉得还不如就按现在这样... 虽然性能差点吧但至少不会让人强迫症发作...
    kyze8439690
        11
    kyze8439690  
       2013-11-11 16:31:20 +08:00
    帮顶
    min
        12
    min  
       2013-11-11 16:32:05 +08:00
    @humiaozuzu 意思是10000不够咯? 100w够不够啊?
    humiaozuzu
        13
    humiaozuzu  
    OP
       2013-11-11 17:01:05 +08:00
    @min 那你干脆说用 21474836 好了
    justfindu
        14
    justfindu  
       2013-11-11 17:03:29 +08:00
    其实修改order为啥一定要修改后续的所有的值的order呢~ 你既然是每日最热~ 那肯定每次出来都是一个 每日的group 只要这个之内能够order正确就可以了啊
    yushiro
        15
    yushiro  
       2013-11-11 17:08:10 +08:00
    order字段在UI调整的时候,不要直接修改值, 而是把2个条目的order字段值交换。
    再配合上面说的各种方法, 比如每个order间隔100(100,200,300这样排)
    再极端点, 如果中间插了超过100个新纪录, 直接update旧order纪录*100, 这样总没问题了吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2567 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:27 · PVG 19:27 · LAX 03:27 · JFK 06:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.