首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >草稿/直播内容系统数据库设计

草稿/直播内容系统数据库设计
EN

Stack Overflow用户
提问于 2011-10-26 05:19:40
回答 2查看 2.1K关注 0票数 8

我一直在做一个项目,它需要内容的草稿/实时版本,并考虑了如下设计:

代码语言:javascript
复制
Article
    ID
    Creator
    CreationDate
    DraftContent(fk to ArticleContent)
    PublicContent(fk to ArticleContent)
    IsPendingApproval

ArticleContent
    Title
    Body

我想知道是在文章发布时更改外键更好,还是只将草稿表中的内容复制到活动表中更好。

有什么建议吗?

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

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

更新:

我们决定使用Kieren的解决方案,但稍作修改。我们决定使用单个状态列,而不是像IsPublished IsLive这样的项使用列。除此之外,设计保持不变。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 05:28:03

实时发布的文章草稿

通常的做法是在文章table - IsLive上设置状态/类型标志。

使用单独的表是不必要的,也是多余的;更改外键也没有多大意义。把文章看作是一个有效的对象,不管它是草稿还是实况。唯一的区别是,在大多数情况下,您只想显示实时文章。在将来的某些情况下,您可能希望两者都显示。

最初成为live后可能被编辑并具有新草稿版本的文章

就同时具有活动版本和草稿版本的文章而言,最常见的模式是拥有一个主Article实体/对象,然后假设ArticleVersion来自该实体/对象。ArticleVersion将具有IsLive属性,或者更好的是,Article本身将具有CurrentLiveVersionId属性。这样一来,可能会有实时版本和草稿版本,但您通常只会通过该CurrentLiveVersionIdArticle加入到ArticleVersion上,以获得当前的实时版本。

拥有ArticleVersion表的优点包括:可以存储文章的整个历史记录,即changelog,因此如果需要,您可以恢复到以前的版本或检查更改。所有这些都是为了非常低的实现成本。

如果我可以澄清这个方法,请告诉我。

票数 11
EN

Stack Overflow用户

发布于 2011-10-26 05:31:33

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

  1. UPDATE键指向(以前) draft article.
  2. DELETE不再引用以前发布的article.
  3. NULL DraftContent键,或者,如果您的模型要求始终具有草稿版本,则将一个新的空草稿INSERTArticleContent中,并将DraftContent键指向它。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7896038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档