我在我的數據庫中有一個日誌表,用於存儲用戶操作的記錄。有一個UserID列,它是外鍵添加到Users表以檢查添加日誌時是否存在UserID。但是,嘗試刪除用戶會導致約束失敗,因爲它會在用戶表中留下不再存在於日誌表中的用戶標識。從日誌中刪除違規的行不是一種選擇,因爲整個要點是要有持久記錄(以便我們可以發現誰打破了什麼,基本上),因此刪除該用戶的所有操作都會使目標失敗。在INSERT上檢查SQL引用約束,但不在DELETE上
有沒有一種簡單的方法可以在插入新日誌時檢查約束(以確保用戶當時存在),但在刪除用戶時不會有這種情況嗎?我正在通過LINQ訪問數據庫,所以我的查詢使用C#,而不是SQL,所以任何需要的東西都沒有了,但我可以通過MS SQL Server Management Studio訪問數據庫,所以我可以用它來做我喜歡的事情。
編輯稍作澄清:知道誰做出行動的價值不僅僅在於問責制;在確定問題是用戶特定的,組織特定的還是系統範圍的時候是非常有用的,這可以大大縮小可能原因的列表。一旦用戶被刪除,仍然值得保留他們的行爲,並且由於各種原因知道該用戶的哪些操作仍然有用 - 例如,當追蹤由一個用戶執行特定組合的事件(例如, 。兩個行動是分開的,但是當一個緊跟在另一個之後時導致錯誤)。
你可以刪除約束(保持柱),只有在你的代碼,如果用戶存在 – Yoav
@Yoav我想嘗試,辦理入住手續,但它需要的日誌庫訪問用戶存儲庫,這是違反我們使用的存儲庫模式。存儲庫並不意味着彼此接觸。雖然我想我可以把它做成一個日誌服務,有一個日誌存儲庫和一個用戶存儲庫,這不會違背模式。 – anaximander