大佬们,我这个表该怎么设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
noobma
V2EX    程序员

大佬们,我这个表该怎么设计

  •  
  •   noobma 2019-12-30 22:02:06 +08:00 3399 次点击
    这是一个创建于 2196 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有些数据需要在后台配置,比如视频、文章、图片等,所以也就有 video、article、picture 这些表,现在要搞一个预览功能,也就是数据配置完成后,先是配置人员预览确认没问题后,再点一下“发布”按钮,这样才会让用户看到新配置的数据。

    现在我想到 2 个方法:

    1. 给每个表加个 status 字段,值为 normal、preview、release,点“发布”按钮,先把每个表里面 release 的置为 normal,然后再把处于 preview 状态下的那一条置为 release。
    2. 专门弄个预览表来存预览状态的数据,preview_video、preview_article、preview_picture,点击“发布”的时候在把这些表里面的数据同步到 preview、article、picture。

    我觉得上面 2 种方法都不大行啊,点击一下“发布”按钮,要做好多操作,感觉容易出幺蛾子啊。

    求各位大佬指点下我这个赶鸭子上架的菜鸡,另外就是大佬们有没有常用的表设计范式的书,推荐一些,不胜感激

    12 条回复    2019-12-31 00:07:53 +08:00
    lhx2008
        1
    lhx2008  
       2019-12-30 22:35:41 +08:00 via Android   1
    第一种吧
    wangyzj
        2
    wangyzj  
       2019-12-30 22:41:47 +08:00   1
    第一种适合小场景
    第二种适合大规模 cdn 场景
    iamwho
        3
    iamwho  
       2019-12-30 22:43:09 +08:00   1
    各个表加 draft 字段,需要权限才能看到,或为 0 显示。
    zhuzhibin
        4
    zhuzhibin  
       2019-12-30 22:58:40 +08:00 via iPhone   1
    听不太明白 如果仅仅是 release 版本 用户才可以浏览得到 那么就统一 state 去管理即可 类似你说的 A 方案 整个页面发布的流程就是
    预览->发布 管理 state 就好 后续复杂也可以补充回滚啥的
    xiaofan2
        5
    xiaofan2  
       2019-12-30 23:04:16 +08:00   1
    第二种没必要,你相当于插了两次相同数据
    avenger
        6
    a href="/member/avenger" class="dark">avenger  
       2019-12-30 23:10:17 +08:00 via iPhone   1
    加个 flag 就好,参考 wordpress
    noobma
        7
    noobma  
    OP
       2019-12-30 23:11:40 +08:00
    谢谢各位大佬,看来第 1 种方案结合上 #3 大佬说的限制权限比较合适
    Sunyanzi
        8
    Sunyanzi  
       2019-12-30 23:11:59 +08:00   1
    为什么我做的预览从来都没有涉及数据库的 ... 都只是用既定的模版渲染一遍用户输入的数据而已 ...

    换言之就是假装页面上展示的这些数据是从库里读出来的 ... 实际上都是前一页输入的还没入库 ...

    顶楼这个需求 ... 在我看来更像一个「待审核」的状态 ... 默认发布只有特定权限组可见 ... 后续才扩展可见性 ...

    那么这样毫无疑问是第一种解决方案 ... 也就是一个 status 字段的事情 ... 何必冗余表呢 ...
    noobma
        9
    noobma  
    OP
       2019-12-30 23:19:56 +08:00
    @Sunyanzi 主要是有些视频和图片需要传到 OSS 上面,如果不在服务器上存住状态的话,一刷新或者换个浏览器,我那个 OSS 上面的空间就被浪费了 已经打算采取第 1 种方式了
    jackrebel
        10
    jackrebel  
       2019-12-30 23:21:37 +08:00
    第一种就好, 第二种你一旦改了主要表的结构, 你这临时表也要跟着改。 要改的地方好多。
    yb3712590
        11
    yb3712590  
       2019-12-31 00:01:25 +08:00
    之前看 informatica 元数据的版本控制设计思路,供参考。
    对象表和模块表存在 visible、validated、version 和 last_save_timestamp 等字段。
    更新某个对象产生了新的版本,会在一张额外的验证表中留下对象 ID 和新的时间戳,对模块查看时,比对模块包含的每个对象的验证记录,时间戳落后则标记为失效模块,进而要求人工验证并刷新整个模块的版本,记录新的时间戳,此时版本最新且模块可用,但只对操作人可见,对应 preview。
    最后对有效模块版本的签入,标记 visible,对所有人可见,对应发布操作。
    mcfog
        12
    mcfog  
       2019-12-31 00:07:53 +08:00 via Android
    几乎任何情况下我都选第二种

    我就不信发布以后就没有修改的需求,有一个人预览就没有第二个人审核的需求

    编辑的时候可能是一个后台表对应一个编辑界面,复杂字段 json 揉一坨完事儿,发布到前台主站可能是三个表外加 es 上报
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2973 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:44 PVG 21:44 LAX 05:44 JFK 08:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86