【问题标题】:Article with revisions system带有修订系统的文章
【发布时间】:2012-12-04 09:37:34
【问题描述】:

对于我正在制作的项目,我需要能够保存所有以前的帖子编辑(修订)。

考虑我可以与帖子有一些 1 到 N 的关联(例如 1 个帖子关联 5 张图片)。

您建议我如何为此设计数据库?
当然,帖子的 ID 应该保持不变,以免破坏 URL:

site/post/123 (whenever revisions it is)

对帖子的每个修订都应手动批准,因此您无法直接显示最后插入的修订。你会建议我如何设计数据库?

我太难了

Table: Post
postID | reviewID | isApproved | authorID |  text

还有图像表(例如图像,但它可以是一切)

Secondary Table: Image
imageID | postID | reviewID | imagedata

【问题讨论】:

  • 你考虑过版本控制系统(例如,git、svn等)吗?
  • @jdigital:我需要自己的解决方案
  • 一张图片可以关联多个帖子吗?
  • 如果您有一些独特的要求不能使用版本控制系统,您能告诉我们它们是什么吗?
  • 这可能是有用的背景考虑:stackoverflow.com/questions/13485852/… 考虑到您的修订要求...

标签: php sql database-design


【解决方案1】:

实际上,我会将 post 表一分为二,其中一个是已批准的修订,另一个是最新(未批准)的修订。合理的是,任何不是最新的未经批准的修订都将被下一个取代(除非您真的想跟踪所有中间修改,无论是否批准)。

Table: OldPost
  postID | reviewID | authorID |  text

Table: PendingPost
  postID | authorID |  text

在该布局中,每当新修订被批准时,都必须将其移至已批准的修订,但在显示整个历史记录时您不必过滤掉它们,相反,您不必过滤已批准的在您网站的审批部分进行修订。

您甚至可以使用另一个专用表格来优化布局,以用于最新批准的修订版(因此总共三个表格用于帖子,不包括附件)。这种分区将提高您网站对最常见查询的整体性能,但在您需要所有数据时会以更复杂的查询为代价(操作频率较低)。

Table: CurrentPost
   postID | authorID |  text

如您所见,此表结构与待处理帖子的表结构相同,因此更新将是微不足道的。 将修订移动到旧的 post 表需要找出修订计数,但无论如何您都必须使用更经典的 db 布局来执行该操作。

关于附件表,布局似乎可行。

【讨论】:

  • 与其他答案相同的建议,请添加数据库示例
【解决方案2】:

在全局信息和版本信息之间分离帖子的所有方面。换句话说,在修订中可以更改哪些内容以及始终适用于任何修订的内容。这些将是您的两个表中的字段,一个用于您的帖子,一个用于修订。您还需要一行来指定修订的帖子以及修订是否被批准,并且在帖子表上,您需要一行来指定当前修订的内容。

【讨论】:

  • 如果可以,请添加数据库表的示例
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多