我有一个新闻表如下,编辑新闻时我想看到新闻的原始版本和所有用户编辑的新闻版本我如何为此制作数据库表结构?
Table news
News id, title, headline, content, date, user
我有一个新闻表如下,编辑新闻时我想看到新闻的原始版本和所有用户编辑的新闻版本我如何为此制作数据库表结构?
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 这样的枚举,因此您可以找到任何新闻文章的修订。
UpdatedBy 包含更新新闻的用户 ID,UpdatedDate 包含更新帖子的日期。
对于历史,我会使用几乎相同的表结构。
表 NewsHistory News_History_ID、新闻id、修订版、标题、标题、内容、日期、用户
News_ID 将引用新闻表中新闻的最新版本 Revision 将用于使跟踪更容易
您可以做的是在您的新闻表中创建 UPDATE 触发器,该触发器将自动将当前版本复制到 NewsHistory 表中。