Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 将可能在主表中更改的数据存储在副表中_Sql_Sql Server_Database_Database Design - Fatal编程技术网

Sql 将可能在主表中更改的数据存储在副表中

Sql 将可能在主表中更改的数据存储在副表中,sql,sql-server,database,database-design,Sql,Sql Server,Database,Database Design,在设计数据库时,这是一个关于最佳实践的总体问题,我无法正确回答我的问题以在网上找到答案 我有一个数据库,其中保存着有关员工安全培训的信息。有关需求的信息需要存储以用于审计目的,但需求可能会逐年变化。我仍然需要记录员工需要做什么以及他们完成了多少 我的第一反应是为历史数据创建一个表,并在员工每次完成操作或完成操作所需的时间到期时基本上存储一个“快照”,这样,如果需求在几年后发生变化,历史表就不会指向错误的信息 我在实现时对其进行了更改,并对应用程序进行了设置,这样它就不会更改现有的需求。每次需求更

在设计数据库时,这是一个关于最佳实践的总体问题,我无法正确回答我的问题以在网上找到答案

我有一个数据库,其中保存着有关员工安全培训的信息。有关需求的信息需要存储以用于审计目的,但需求可能会逐年变化。我仍然需要记录员工需要做什么以及他们完成了多少

我的第一反应是为历史数据创建一个表,并在员工每次完成操作或完成操作所需的时间到期时基本上存储一个“快照”,这样,如果需求在几年后发生变化,历史表就不会指向错误的信息

我在实现时对其进行了更改,并对应用程序进行了设置,这样它就不会更改现有的需求。每次需求更改时,它都会创建一个新的需求,以便旧的需求仍在数据库中,并由历史表指向。在主表的需求表中,旧需求被标记为非活动,并且永远不能通过应用程序删除

我相信这个问题以前也遇到过,但我无法很好地表达出来,独自寻找可行的答案。我的问题是,在这种情况下,什么是最好的方法?我当前的实现是好的吗?我的第一反应更好吗?还有比两者都好的方法吗


在旁注中,如果有一个词或短语用于此类问题(存储冗余数据、存储历史数据、存储审计数据,我不知道该怎么称呼),请告诉我。

据我所知,您有员工和相关任务。我将为员工创建一个表,为任务创建一个表。另一个多对多表将这些链接到。在任务表中,您将有一个状态和日期生效自/至列。如果任务当前有效,则可以将“生效日期”保留为空或将值设置为1/1/2999。查询任务时,您需要提供日期,以便能够使任务在特定日期生效。如果您决定使用null值,where子句如下


t.DateEffectiveFrmBack兼容性在哪里?还是版本控制?