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

2019-12-30 22:02:06 +08:00
 noobma

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

现在我想到 2 个方法:

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

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

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

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

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

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

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

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

编辑的时候可能是一个后台表对应一个编辑界面,复杂字段 json 揉一坨完事儿,发布到前台主站可能是三个表外加 es 上报

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

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

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

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

© 2021 V2EX