>我有一个新闻表如下,在编辑新闻时,我想看到新闻的原始版本和所有用户编辑的新闻版本如何为此制作数据库表结构?
Table news
News id, title, headline, content, date, user
长答案是了解面向时间的数据库应用程序,有一个网站有一本关于它的电子书。
简短的版本是要么为历史记录设置另一个表,要么更改现有表以允许历史记录。
考虑如何区分"原始版本"、"编辑版本"和"最新版本"。它可以只是按日期,或者您可以尝试维护自己的版本号列,或者您甚至可能需要某种标志或位字段(我不建议使用此选项)。
更新
一种可能的解决方案(很难知道最适合你的方案的解决方案,所以只是一个示例):
将现有表保留为最新版本,因为这是您大多数时候可能需要的。
为历史版本添加另一个表,并在代码(或 SQL 触发器,如有必要)中将现有版本复制到历史记录表,然后再保存更新。历史记录表的架构可能如下所示:
CREATE TABLE [dbo].[NewsHistory]
(
NewsHistoryID int IDENTITY(1, 1) PRIMARY KEY,
NewsID int NOT NULL,
Title varchar(100),
Headline varchar(200),
Content varchar(MAX),
CreatedAt datetime NOT NULL,
CreatedBy int NOT NULL
)
只需在编写更新之前从现有表中填充NewsID, Title, Headline, Content, CreatedAt, CreatedBy
即可。
当您想要查看新闻项的历史记录时,只需:
SELECT
Title,
Headline,
Content,
CreatedAt,
CreatedBy
FROM NewsHistory
WHERE NewsID = @newsID
ORDER BY NewsHistoryID
如果您愿意,可以按日期排序,但如果所有内容都按正确的顺序插入,则自然排序应该在这里起作用。同样,取决于您的需求/环境。
看,我想你想跟踪文章的编辑版本,所以请使用下面的架构。
NewsId,User,Title,HeadLine,Content,Status,PostType,UpdatedBy,UpdatedDate
状态包含像已发布,草稿之类的枚举!因此,您可以找到已发布的帖子。
PostType包含像Revision,Final这样的枚举,因此您可以找到任何新闻文章的修订版。
UpdateBy 包含更新新闻的用户 ID,UpdateDate 包含帖子更新的日期。
我会使用几乎相同的历史表结构。
表新闻历史News_History_ID, 新闻 ID, 修订, 标题, 标题, 内容, 日期, 用户
News_ID将引用新闻表中新闻的最新版本修订版将用于使跟踪更容易
您可以做的是在新闻表中创建 UPDATE 触发器,该触发器将自动将当前版本复制到新闻历史记录表中。