Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
295 views
in Technique[技术] by (71.8m points)

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

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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,决定显示哪一个版本。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...