Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 维护调查数据库中数据完整性的最佳方法_Sql Server_Database Design_Survey_Data Integrity - Fatal编程技术网

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

Sql server 维护调查数据库中数据完整性的最佳方法,sql-server,database-design,survey,data-integrity,Sql Server,Database Design,Survey,Data Integrity,我正在创建一个内部检查应用程序/调查,不确定在更新调查问题时,保持历史数据完整性的最佳方法是什么。例如,如果一个管理员去修改一个预先确定的调查问题,我不想让任何已完成的调查更新其相关数据。这样,当审计完成时,调查被视为与最初一样。我正在使用SQL Server 我自己想出的选择是 每次更新问题时创建新的“QuestionId”,并将现有问题标记为不活动 或者存储原始“问题”和每个“答案” 我以前没有在关系数据库上做过类似的事情,在查找任何教程时遇到困难。。有什么建议吗?我会这样做,我会添加两列,

我正在创建一个内部检查应用程序/调查,不确定在更新调查问题时,保持历史数据完整性的最佳方法是什么。例如,如果一个管理员去修改一个预先确定的调查问题,我不想让任何已完成的调查更新其相关数据。这样,当审计完成时,调查被视为与最初一样。我正在使用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看起来是个好主意。当用新值更新“旧”问题时,您最终可以存储一个对“旧”问题的引用,并增加一个“版本号”,以便以后更容易检索问题历史记录,但这当然取决于数据库的设计……好的,我基本上按照建议做了类似的事情。。为每个项目实现版本控制。