Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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_Database Design - Fatal编程技术网

Sql server 有历史记录表的优点和缺点是什么?

Sql server 有历史记录表的优点和缺点是什么?,sql-server,database,database-design,Sql Server,Database,Database Design,更好的做法是什么 将历史记录保存在单独的历史记录表中 是否在活动表中保留状态不同的历史记录 在我看来,我宁愿保留一个单独的表,以避免创建一个包含重复记录的大型表,这在查询表时可能会导致不必要的延迟时间。我的首选始终是使用一个包含历史记录的单独表,纯粹是因为它不需要“WHERE Status='LIVE'”或“WHERE CurrentRecord=1”获取最新记录(我不会进入一个需要内联查询才能获取max(version)以获取最新记录的设计)。这意味着当前记录表应该保持较小,访问时间可能会缩短

更好的做法是什么

  • 将历史记录保存在单独的历史记录表中

  • 是否在活动表中保留状态不同的历史记录


  • 在我看来,我宁愿保留一个单独的表,以避免创建一个包含重复记录的大型表,这在查询表时可能会导致不必要的延迟时间。

    我的首选始终是使用一个包含历史记录的单独表,纯粹是因为它不需要“WHERE Status='LIVE'”或“WHERE CurrentRecord=1”获取最新记录(我不会进入一个需要内联查询才能获取max(version)以获取最新记录的设计)。这意味着当前记录表应该保持较小,访问时间可能会缩短,等等。在最坏的情况下,我看到一个针对表的临时查询获取了错误版本的记录,导致了以后的各种问题


    此外,如果您已经从另一个表中获取了历史记录,则可以对数据进行切分,这样一年中的所有历史记录都在一个表/db中,而另一年中的所有历史记录都在另一个表/db中,依此类推。

    我会选择一个单独的表,否则设置唯一和FK约束可能仍然可行,但是太复杂了。

    专业人士:
    如果将历史记录保存在单独的表中,则只有在需要搜索过去的内容时,才会访问此数据。大多数情况下,主表的使用量远远超过历史表。因此,这意味着更快的结果。
    反对意见:
    在我工作的一个项目中,我有一个包含350列的表(不要问为什么…)。因此,当数据输入时,这个表变得非常大。在特定时刻,记录从“活动”状态变为“关闭”状态。我试图将所有已关闭的记录移动到一个新表(历史记录表),但我意识到这更慢——在许多查询中,我不得不进行联合


    最后,我认为这取决于每种情况,但我始终会首先考虑单独的表。

    我更喜欢使用一个表和分区。我还将为活动记录设置一个视图,并在查询活动记录时使用该视图而不是基表。

    回答得很好。我认为这完全取决于具体情况。有些桌子仍然很小,不需要单独的桌子。我不认为每个表都有一个历史记录表是一种好的做法。您如何确保VIN或SSN是唯一的?您如何确保当前行不是孤立行,但历史行可以是孤立行?我绝不允许历史行成为孤立行。若您需要强制执行活动记录的唯一性,那个么必须在触发器中完成。