我正在创建一个内部检查应用程序/调查,并且不确定在对调查问题进行更新时保持历史数据完整性的最佳方法是什么。例如,如果管理员修改预先确定的调查问题,我不希望任何已完成的调查更新其相关数据。这样,当审计完成时,调查就会被视为最初的样子。我正在使用 SQL Server。
我自己提出的选项是
- 每次更新问题时创建一个新的“QuestionId”并将现有问题标记为非活动。
- 或将原始“问题”与每个“答案”一起存储
我以前没有用关系数据库做过类似的事情,并且在查找任何教程时遇到了麻烦。有什么建议吗?
我正在创建一个内部检查应用程序/调查,并且不确定在对调查问题进行更新时保持历史数据完整性的最佳方法是什么。例如,如果管理员修改预先确定的调查问题,我不希望任何已完成的调查更新其相关数据。这样,当审计完成时,调查就会被视为最初的样子。我正在使用 SQL Server。
我自己提出的选项是
我以前没有用关系数据库做过类似的事情,并且在查找任何教程时遇到了麻烦。有什么建议吗?
我会做这样的事情,我会添加两列,
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