从一个存储它历史记录的表中检索记录的最佳方法是什么?

时间:2015-09-28 18:34:03

标签: sql-server database-design relational-database

我有一个虚拟表'用户',让我们称之为U,另一个表' DataFromUsers',DU。我会不时地将新记录保存到DU中,与一个U相关,现在我们有2条记录指向同一个用户U.它将来到我有很多时间DU中的条目类似于这种情况。

我能看到解决此问题的最佳方法是始终存储它的插入日期,一旦我关心的是来自U的最新DU,并且只保留旧条目用于分析目的。

另一种方法是让U中的FK直接指向DU的最新记录,但是这需要总是更新两个表,我不知道这是不是一个好主意(在可维护性和性能方面)。

1 个答案:

答案 0 :(得分:1)

在一般情况下,您将在子表中包含整数版本字段。 1

但是在SQL Server的特定情况下,包括父表中的显式外键将允许您创建indexed view并有效地缓存父项和最近一项子项之间的JOIN。仔细考虑一下你是否真的需要它,如果你这样做,要非常小心,不要让这个FK不同步! 2

1 如果您的数据库服务器的时钟不同步,则日期/时间可能会有问题,但除了整数版本之外,您可以(仅)包含它以用于提供信息。< / em>的

2 您必须在插入新子项之前锁定父级,以避免在并发环境中的竞争条件,您必须确保所有客户遵循这一点。幸运的是,仅仅尝试更新父行(设置新的FK值)也会锁定它。