文章与修订制度

时间:2012-12-04 00:56:20

标签: php sql database-design

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

考虑我可以与帖子有一些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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

实际上,我会将邮政表分成两部分,其中一部分是批准的修订,另一部分是最新的(未批准的)修订。理性的是,任何非最新的非批准修订都将被下一个修改(除非您真的想跟踪所有中间修改,无论是否批准)。

Table: OldPost
  postID | reviewID | authorID |  text

Table: PendingPost
  postID | authorID |  text

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

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

Table: CurrentPost
   postID | authorID |  text

正如您所看到的,此表结构与待发帖的结构相同,因此更新将是微不足道的。 将修订版移动到旧帖子表需要找出修订版计数,但是你必须使用更经典的数据库布局来执行该操作。

关于附件表,布局似乎有效。