5

您如何表示SQL中的多對多關係temporal?在非暫時情況下,人們會使用junction table(又名鏈接/橋/地圖)來連接雙方。如何在SQL中創建時態多對多關係?

添加時間跟蹤與在聯結表上包含ValidStart和ValidEnd列一樣簡單嗎?如果你這樣做了,你遇到了什麼問題(如果有的話)?有沒有更好的方法來跟蹤這種關係隨時間的變化?

如果它有幫助,在我的情況下,我特別使用SQL 2008和臨時數據不是bitemporal,因爲我只跟蹤有效時間。

回答

5

我正在研究一個項目(現在幾年),它使用時間數據和時間多對多關係。每個表都有ValidFrom和ValidUntil列(僅存儲日期)。

首先,您必須定義Valid *列的語義,即是否包含ValidUntil或從有效範圍中排除了ValidUntil。您還需要指定NULL日期是否有效以及它們的含義如何。

接下來,您需要一些函數,如分別接收2和3日期範圍的dbo.Overlaps2()和dbo.Overlaps3(),如果日期範圍重疊則返回1,否則返回0。

最重要的是,我爲dbo.Overlap3(...)= 1定義了多對多關係的視圖。

還有一點就是有一組函數可以根據2或3個相關表中的日期計算有效的有效範圍。

最近我不得不添加功能,以允許用戶顯示所有可用的數據,或只有當前有效的數據。我將此設置保存在用戶表中,在打開連接時將SPID關聯到用戶,並在另一組視圖中篩選記錄。

+0

哇,你已經用了很多。我最初認爲產品表上的「有效定價」就是一個例子,但很明顯,「有效約會」的用途還有很多。 – jeremcc 2009-02-20 04:37:24