Sql server 维护调查数据库中数据完整性的最佳方法
我正在创建一个内部检查应用程序/调查,不确定在更新调查问题时,保持历史数据完整性的最佳方法是什么。例如,如果一个管理员去修改一个预先确定的调查问题,我不想让任何已完成的调查更新其相关数据。这样,当审计完成时,调查被视为与最初一样。我正在使用SQL Server 我自己想出的选择是Sql server 维护调查数据库中数据完整性的最佳方法,sql-server,database-design,survey,data-integrity,Sql Server,Database Design,Survey,Data Integrity,我正在创建一个内部检查应用程序/调查,不确定在更新调查问题时,保持历史数据完整性的最佳方法是什么。例如,如果一个管理员去修改一个预先确定的调查问题,我不想让任何已完成的调查更新其相关数据。这样,当审计完成时,调查被视为与最初一样。我正在使用SQL Server 我自己想出的选择是 每次更新问题时创建新的“QuestionId”,并将现有问题标记为不活动 或者存储原始“问题”和每个“答案” 我以前没有在关系数据库上做过类似的事情,在查找任何教程时遇到困难。。有什么建议吗?我会这样做,我会添加两列,
我以前没有在关系数据库上做过类似的事情,在查找任何教程时遇到困难。。有什么建议吗?我会这样做,我会添加两列,
1)数据\u ID
2)数据\u原始\u ID
每次创建记录时,都会填充数据\u ID字段,但在更新记录之前,数据\u原始\u ID保持为空。
更新记录时,数据原始ID列将填充原始ID并保持不变。
但每次更新一行时,它都会被分配一个新的数据ID,但数据原始ID将保留其值。
为您的用户提供一个视图,以便仅查看最新的数据,如下图所示
视图定义
CREATE VIEW [dbo].[view_TableView]
AS
SELECT a.* FROM TableName AS a
WHERE (a.Data_Original_ID IS NULL AND a.data_ID NOT IN (SELECT DISTINCT Data_Original_ID
FROM TableName
WHERE Data_Original_ID IS NOT NULL)
OR a.data_ID = (SELECT MAX(data_ID)
FROM TableName
WHERE Data_Original_ID = a.Data_Original_ID)
GO
我认为你的选择1看起来是个好主意。当用新值更新“旧”问题时,您最终可以存储一个对“旧”问题的引用,并增加一个“版本号”,以便以后更容易检索问题历史记录,但这当然取决于数据库的设计……好的,我基本上按照建议做了类似的事情。。为每个项目实现版本控制。