[英]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
通过CurrentLiveVersionId
将Article
加入ArticleVersion
来获取当前的实时版本。
使用ArticleVersion
表的优点包括可以存储文章的整个历史记录,更改日志,因此您可以根据需要恢复到以前的版本,或者查看更改。 所有这些都是非常低的实施成本..
如果我能澄清这种方法,请告诉我。
你的设计看起来很合适。 当新版本上线时,我会:
UPDATE
PublicContent
键以指向(以前)草案文章。
DELETE
不再引用的以前发表过的文章。
NULL
的DraftContent键,或者,如果你的模式要求总是有一个草案版本, INSERT
一个新的空草案进入ArticleContent
和点DraftContent
钥匙。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.