在调查数据库中维护数据完整性的最佳方法

时间:2013-10-15 16:34:54

标签: sql-server database-design survey data-integrity

我正在创建内部检查应用/调查,并且不确定在对调查问题进行更新时保持历史数据完整性的最佳方法是什么。例如,如果管理员进入修改预定的调查问题,我不希望任何已完成的调查更新其相关数据。这样,当审计完成时,调查就像最初一样。我正在使用SQL Server。

我自己想出的选择是

  1. 每次更新问题时创建新的“QuestionId”,并将现有问题标记为非活动状态。
  2. 或在每个“答案”中存储原始“问题”
  3. 我之前没有使用关系数据库做过这样的事情,而且找不到任何教程有困难..有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我会做这样的事情我会添加两列,1)data_ID
2)Data_Original_ID
每次创建记录时,Data_ID字段都会被填充,但Data_Original_ID将保持为空,直到您更新记录为止。
何时更新记录Data_Original_ID列将填充原始ID并保持不变。
但每次更新行时,都会为其分配一个新的data_ID,但Data_Original_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