1
我有三個表及其相關的欄目有:最佳方式多到很多連接
tPerson
-> PersonID
tPersonStatusHistory
-> PersonStatusHistoryID
-> PersonID
-> StatusID
-> PersonStatusDate
Status
-> StatusID
我想存儲的所有狀態的完整歷史,一個人過。但我也想輕鬆訪問當前狀態。
查詢來獲取當前狀態:
SELECT TOP 1 StatusID FROM tPersonStatusHistory
WHERE PersonID = ? ORDER BY PersonStatusDate DESC
我要的是一個查詢,將獲取我的個人記錄列表,以及他們最近StatusID,查詢中的一列。
我們曾嘗試以下方法:
- 包括上述查詢中選擇一個子查詢。
- 將CurrentPersonStatusHistoryID列添加到tPerson表並使用調用用戶定義函數的計算列對其進行維護。
- 使用tPersonStatusHistory表上的觸發器維護CurrentPersonStatusHistoryID列。
拉起Person記錄的查詢功能相當高,所以我不想每次都查找歷史記錄表。觸發器方法與我想要的最接近,因爲數據在Person表中保存,並且只有在進行更新時纔會更改(這不是經常進行比較)。
我覺得觸發很難維護,我寧願遠離它們。我還發現,在執行插入選擇或涉及多個記錄的更新查詢時,觸發器僅在第一個記錄上調用,而不在其他記錄中調用。
我真正想要的是將一些邏輯放入CurrentPersonStatusHistoryID的列定義中,按下Save並讓它在後臺保留並更新,而無需我的干預。
鑑於多對多的關係很常見,我想知道是否有其他人遇到類似的情況,並對最高性能,最好是最簡單的實現方式有所瞭解。
我從來沒有見過這樣的人,謝謝;它肯定比其他方法更清潔。我會把它變成一個視圖,並加入它而不是表格,並看看我如何去。 –