我有一个新闻表如下,在编辑新闻时,我希望所有用户都能看到新闻的原始版本和新闻的编辑版本,我该如何制作数据库表格结构?
Table news
News id, title, headline, content, date, user
答案 0 :(得分:3)
长期的答案是了解面向时间的数据库应用程序,web site有一个eBook。
简短版本要么具有另一个历史记录表,要么更改现有表以允许历史记录。
考虑如何区分“原始版本”,“编辑版本”和“最新版本”。它可以简单地按日期,或者您可以尝试维护自己的版本号列,或者您甚至可能需要某种标记或位字段(我不建议使用此选项)。
<强>更新强>
一种可能的解决方案(很难知道最适合您的方案的解决方案,所以只是一个例子):
保留现有表格以获取最新版本,因为这是您大部分时间可能需要的。
为历史版本添加另一个表,并在代码中(如果必须,还为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
如果您愿意,可以按日期排序,但如果按正确的顺序插入所有内容,则自然排序应该在此处起作用。同样,取决于您的需求/环境。
答案 1 :(得分:0)
请参阅,我想您要跟踪文章的编辑版本,因此请使用以下架构。
NewsId,User,Title,HeadLine,Content,Status,PostType,UpdatedBy,UpdatedDate
状态包含enum,例如Published,Draft something。!所以你可以找到已发布的帖子。
PostType包含类似于Revision,Final的枚举,因此您可以找到任何新闻文章的修订版。
UpdatedBy包含更新新闻和用户的用户ID UpdatedDate包含更新帖子的日期。
答案 2 :(得分:0)
我会选择几乎相同的历史表结构。
表新闻历史 News_History_ID,新闻ID,修订版,标题,标题,内容,日期,用户
News_ID将在新闻表中引用最新版本的新闻 修订将用于使跟踪更容易
您可以在新闻表中创建UPDATE触发器,该触发器会自动将当前版本复制到NewsHistory表中。