我一直在做一个项目,它需要内容的草稿/实时版本,并考虑了如下设计:
Article
ID
Creator
CreationDate
DraftContent(fk to ArticleContent)
PublicContent(fk to ArticleContent)
IsPendingApproval
ArticleContent
Title
Body我想知道是在文章发布时更改外键更好,还是只将草稿表中的内容复制到活动表中更好。
有什么建议吗?
编辑:草稿和实时版本同时存在,尽管实时版本是唯一对公众可见的版本。只能有一个草稿和一个活动表
这种设计的部分原因是为了迫使用户在上线之前获得他们的文章的批准。
更新:
我们决定使用Kieren的解决方案,但稍作修改。我们决定使用单个状态列,而不是像IsPublished IsLive这样的项使用列。除此之外,设计保持不变。
发布于 2011-10-26 05:28:03
实时发布的文章草稿
通常的做法是在文章table - IsLive上设置状态/类型标志。
使用单独的表是不必要的,也是多余的;更改外键也没有多大意义。把文章看作是一个有效的对象,不管它是草稿还是实况。唯一的区别是,在大多数情况下,您只想显示实时文章。在将来的某些情况下,您可能希望两者都显示。
最初成为live后可能被编辑并具有新草稿版本的文章
就同时具有活动版本和草稿版本的文章而言,最常见的模式是拥有一个主Article实体/对象,然后假设ArticleVersion来自该实体/对象。ArticleVersion将具有IsLive属性,或者更好的是,Article本身将具有CurrentLiveVersionId属性。这样一来,可能会有实时版本和草稿版本,但您通常只会通过该CurrentLiveVersionId将Article加入到ArticleVersion上,以获得当前的实时版本。
拥有ArticleVersion表的优点包括:可以存储文章的整个历史记录,即changelog,因此如果需要,您可以恢复到以前的版本或检查更改。所有这些都是为了非常低的实现成本。
如果我可以澄清这个方法,请告诉我。
发布于 2011-10-26 05:31:33
你的设计看起来很适合我。当一个新版本上线时,我会:
将
UPDATE键指向(以前) draft article.DELETE不再引用以前发布的article.NULL DraftContent键,或者,如果您的模型要求始终具有草稿版本,则将一个新的空草稿INSERT到ArticleContent中,并将DraftContent键指向它。https://stackoverflow.com/questions/7896038
复制相似问题