我正在組建一個員工數據庫,我需要能夠修改員工信息,但也要跟蹤所有修訂。我應該如何構建數據庫,以便可以對相同的用戶數據進行多次修訂,但是能夠根據最新版本進行查詢?我正在查看很少發生變化的信息,例如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