我正在组建一个员工数据库,我需要能够修改员工信息,但也要跟踪所有修订。我应该如何构建数据库,以便可以对相同的用户数据进行多次修订,但是能够根据最新版本进行查询?我正在查看很少发生变化的信息,例如Last Name,但我需要能够查询过期值。所以如果珍妮史密斯将她的名字改为詹妮詹姆斯,我需要能够在我搜索她的旧名时找到用户当前的信息。我应该在哪里分手我的用户记录以跟踪修订
我假设我将至少需要2个表,其中一个包含uid,另一个包含修订版。然后,我会加入他们,并查询最新的修订。但是,我应该进一步分解它,这取决于数据更改的频率或数据类型?我正在查看每个记录约40个字段,每个更新只有一个或两个字段可能会更改。此外,我无法从数据库中删除任何数据,我需要能够回顾以前的所有记录。
“已删除”列上的索引如何提供帮助?如果查询引擎使用此索引,是不是必须对所有其他列执行表扫描?将搜索字段编入索引并放弃搜索结果中删除的行不是更好吗? – 2010-08-23 21:36:12
不,它会在已删除的列上使用索引扫描,然后在其他列中进行搜索。您可以有多个索引,并且查询优化器将使用数据库收集的统计信息来估计每个索引的相对性能,并将它们按顺序排列,以便首先使用期望得到最少结果的索引。尝试对一些查询进行EXPLAIN PLAN,看看它是如何工作的。优化器通常非常聪明,以至于只有10%的记录被实际删除时,他们才知道使用索引是不值得的。 – 2010-08-23 21:48:33
所以让我重申一遍。我会有两张桌子,其中一名工作人员不变,另一名工作人员的细节可变。该员工详细信息表中将有一个索引字段(已删除),我将在为该工作人员插入新记录时设置该字段。当我想查询最新版本时,我只限于删除= 0的地方。我错过了什么吗? – 2010-08-24 20:32:45