编辑新闻的数据库结构

时间:2013-09-10 02:09:47

标签: sql sql-server

我有一个新闻表如下,在编辑新闻时,我希望所有用户都能看到新闻的原始版本和新闻的编辑版本,我该如何制作数据库表格结构?

Table news
News id, title, headline, content, date, user

3 个答案:

答案 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表中。