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是唯一的?您如何确保当前行不是孤立行,但历史行可以是孤立行?我绝不允许历史行成为孤立行。若您需要强制执行活动记录的唯一性,那个么必须在触发器中完成。