一个问答数据库表设计问题?

在表设计上有一个疑问,大体上需求:

  • 前端用户提交问题后,进入后台审核;
  • 后台审核成功后在前台显示出来;
  • 如果用户继续修改,那么问题继续进行审核,但是原先的信息仍然可以看到,如果审核失败则需要重新修改;

想问下这种结构的MySQL表格如何设计比较好,是单独拆分成问题+审核表,还是在一张表里使用多个字段分别表示当前信息+修改信息比较好。

目前考虑的是两张表,分别用questions+checks表示,questions里永远只显示审核成功的(显示或者隐藏),checks里记录需要审核的,审核成功后将信息同步到questions中。

阅读 3.2k
1 个回答

如果不考虑问题版本的问题,那一个表两个字两个字段更清晰一些。

id(uuid),
title(string),
question(string), // 正式版本的问题
createdOn(timestamp),
lastModified(timestamp),
author(string),
type(enum),
flag(enum),
underChecking(boolean), // 是否存在审核中的版本
changed(string), // 审核中的问题版本
changedOn(timestamp),
... //其他字段

这样的结构,question为问题的发布版本。默认情况下underChecking为false,changed为空,lastModified与createdOn相同,changedOn为空。
当用户发起修改问题的请求时,underChecking为true,changed为修改后的待审核版本,changedOn为修改提交的时间。
审核通过,underChecking为false,question替换为changed,changed置空,lastModified替换为changedOn,changedOn置空。

考虑问题的版本,就需要checks表,所有问题都存在checks表中,在questions表中关联checks的id,决定显示哪一个版本。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题