我有一組表,我目前正試圖爲表設置正確的關係。濃縮版本如下。解決循環和多個級聯路徑
Users
ID INT NOT NULL
Activities
ID INT NOT NULL
UserID INT NULL
Logs
ID INT NOT NULL
UserID INT NULL
ActivityID INT NULL
我有關係,從兩個Activities
和Logs
回Users.ID
和ActivityID
與回Activities.ID
與UserID
。
我已經設置Activities.UserID
和Logs.UserID
在刪除時設置爲null,並在更新時級聯。我的問題是,當我試圖設置相同的更新和刪除功能Logs.ActivityID
,但我得到一個關於「可能導致週期或多個級聯路徑」的錯誤。我的問題是,Logs
需要一個用戶,並且不需要Activity
,但Logs
確實有一個Activity
需要更新,如果Activity
發生更改時。
我有什麼辦法,不涉及有兩個單獨的Logs
表,並且不涉及手動更新Logs
表。這在SQL Server 2012中甚至可能嗎?
爲什麼你需要這樣做級聯?我懷疑,刪除一個用戶是一個非常罕見的事件,你可以編寫自己的刪除邏輯,在刪除用戶之前手動刪除(或設置NULL)值。 –
如果我實際上不能使用它們,級聯和設置爲null會有什麼意義?重點是,他們在那裏被使用,我希望能夠解決SQL服務器在幾乎所有其他的SQL引擎上的缺點,而不必編寫刪除和空邏輯我自己 – bizzehdee
很多東西存在考慮到最簡單的實現編寫的SQL Server,並且未針對更復雜的實現進行測試(因此不支持)。 FWIW,由於這個和其他原因,我從未在生產中使用CASCADE。如果在有多條路徑的情況下讓CASCADE自動工作對您來說很重要,那麼請務必使用另一個數據庫平臺。當然,你會花更多的時間來轉換你的模式和代碼,而不是編寫一個程序來爲你做這件事...... –