2011-04-26 40 views
5

你有哪些建議,爲什麼?版本控制每個字段與歷史日期字段?

我有幾張表格,當我對數據進行更改時...它應該轉到具有生效日期的歷史記錄表(審覈)。

另一種解決方案是對每個字段進行版本控制,以在對數據進行更改時插入新行?

這是發票信息的最佳方法?商品名稱和價格總是變化

回答

4

這些是slowly changing dimensions,type 2type 4,適當。

這兩種方法都是有效的,可能更適合您的需求,具體取決於您的模型和查詢要求。

基本上,type 2(版本)是當你需要經常查詢歷史值作爲當前一個比較合適的,而type 4(歷史記錄表)是當你更經常查詢的電流值更適合,並有更多的疑問(更多查詢開發我的意思)與最近的價值。

+0

我有一個order_items來顯示過去的訂單..哪一個更好?商品名稱和價格的價值總是在變化。 – user622378 2011-04-26 13:01:06

+0

@user:通常(通常)歷史記錄表更好,因爲您需要當前價格更重要,並且針對它運行更多查詢。這樣,您就不需要在每個查詢的'isActive'或類似字段上添加一個過濾器。 – Quassnoi 2011-04-26 13:03:11

+0

而不是歷史表中的DATE,我添加了版本字段。表的示例:item.version,item_history.version和order_table表將包含版本號。所以我會得到100%準確的信息,而不是在日期搜索中繼續。 – user622378 2011-04-26 14:07:01

2

我們使用並樂於使用的系統:
每個需要歷史記錄的表,我們創建一個類似的表,並在末尾添加一個時間戳字段,它將成爲PK的一部分。
在原表中的每個更新,我們插入到歷史表在相同的條件:

update table x WHERE somthing something 

insert into table x_history 
select * from x WHERE something something 

,讓您的數據清理和你的表渺茫。

+0

這個解決方案的準確性沒有問題嗎?例如..顯示發票數據從歷史表(舊數據)..我希望它顯示正確的價格大聲笑 – user622378 2011-04-26 13:03:44

+0

爲什麼應該有一個問題?你可以使用版本控制,但它涉及更多的邏輯/代碼,我覺得沒有必要 – 2011-04-26 14:29:14

0

我的個人偏好是在您的應用程序中使用Observer Pattern並實現單獨的歷史記錄表。這意味着您可以在需要時從歷史記錄表中提取數據,而且不會降低查詢主表的速度。