繁体   English   中英

草稿/实时内容系统数据库设计

[英]Draft / Live Content System Database Design

我一直在研究一个需要草案/实时版本内容的项目,并考虑过如下设计:

Article
    ID
    Creator
    CreationDate
    DraftContent(fk to ArticleContent)
    PublicContent(fk to ArticleContent)
    IsPendingApproval

ArticleContent
    Title
    Body

我想知道在发布文章时更改外键是否更好,或者将草稿表中的内容复制到实时表是否更好。

有什么建议?

编辑:草稿和实时版本同时存在,但实时版本是唯一对公众可见的版本。 只能有一个草稿和一个实时表格

这种设计的部分原因是迫使用户在上线之前批准他们的文章。

更新:

我们决定稍微修改使用Kieren的解决方案。 我们决定使用单个状态列,而不是像IsPublished IsLive这样的项使用列。 否则设计保持不变。

生效的条款草案然后被“发布”

通常的做法是在文章表上有一个状态/类型标志IsLive

使用单独的表是不必要和冗余的; 更改外键也没有多大意义。 将该文章视为有效对象,无论是草稿还是实时。 唯一的区别是,在大多数情况下,您只想显示实时文章。 在将来的某些情况下,您可能希望同时显示两者。

在最初生效后可能编辑并具有新草稿版本的文章

对于同时具有实时版本和草稿版本的文章而言,最常见的模式是拥有主Article实体/对象,然后说出ArticleVersion ArticleVersion将具有IsLive属性,甚至更好, Article本身将具有属性CurrentLiveVersionId 这样就可以有一个实时和草稿版本,但你通常ArticleVersion通过CurrentLiveVersionIdArticle加入ArticleVersion来获取当前的实时版本。

使用ArticleVersion表的优点包括可以存储文章的整个历史记录,更改日志,因此您可以根据需要恢复到以前的版本,或者查看更改。 所有这些都是非常低的实施成本..

如果我能澄清这种方法,请告诉我。

你的设计看起来很合适。 当新版本上线时,我会:

  1. UPDATE PublicContent键以指向(以前)草案文章。

  2. DELETE不再引用的以前发表过的文章。

  3. NULL的DraftContent键,或者,如果你的模式要求总是有一个草案版本, INSERT一个新的空草案进入ArticleContent和点DraftContent钥匙。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM