2009-06-18 22 views
2

有沒有人有過使用數據集的經驗,根據有效的開始日期和結束日期,記錄變得有效和無效?問題是這些表中的記錄是否具有其他表的外鍵,這些表也具有有效的開始日期和結束日期數據庫記錄 - 有效的開始日期和結束日期以及外鍵

似乎您必須最終爲每個表創建新記錄以允許外鍵更新,同時保留歷史記錄。

例子:

---寵物---
狗命名的碧玉,主人是傑克揚 - >君和君賣給肯 - >時間

---所有者結束---
傑克住在A樓,從jan - > feb,然後B樓從feb - >時間的盡頭
Ken住在C公寓,從二月 - >九月,D樓從九月 - >時間的盡頭

因此,如果在6月份的賈斯珀報告中,老闆將在傑克生活在何使用B.同樣的查詢運行九月將肯在衆議院D.

如何建立這種關係的最佳方式是?以及如何對數據執行「更新」以維護適當的關係?

回答

4

我們用於解決這些問題的方法是不將元素的所有權保留在同一個表中,而是包含時間表的映射表中。

Table DOGS 
- ID 
- NAME 

Table OWNER 
- ID 
- NAME 

Table LOCATION 
- ID 
- HOUSE_NAME 

Table DOGS_OWNERSHIP: 
- DOG_ID (FK->DOGS.ID) 
- OWNER_ID (FK->OWNER.ID) 
- START_TIME 
- END_TIME 

Table OWNER_LOCATION 
- OWNER_ID (FK->OWNER.ID) 
- LOCATION_ID (FK->LOCATION.ID) 
- START_TIME 
- END_TIME 

這樣,您可以在兩個表中完全保留所有權,位置和各自的時間表。

如果所有權或位置發生更改,則更新相應時間軸表中當前所有權/位置的END_TIME,並從當前時間和新結束時間(結束時間)開始添加新條目, 。

您還想添加一些約束條件以確保沒有任何重疊的映射,但這取決於您的業務邏輯和首選項。

1

「有沒有人有過使用數據集的經驗,根據有效的開始和結束日期,記錄變得有效和無效?」

是的,我有(但那差不多是15年前)。

好消息:您的問題(即管理時態數據)是可以解決的。

壞消息:你的問題不能用今天存在的任何SQL系統解決,並且不可能用將來存在的任何SQL系統解決。

對於這個問題的基礎性處理,我可以推薦閱讀Lorentzos,Darwen和Date的「時間數據和關係模型」。

對於他們想法的原型實現,我可以推薦SIRA_PRISE。

相關問題