2014-01-15 18 views
2

我有以下型號:SQL Server多級聯路徑問題 - 我的模型有問題嗎?

ER diagram

我要上刪除自動級聯工作 - 既因爲它的方便,讓我的數據一致,因爲它在實體框架代碼優先很好的支持。問題是這個特定的模型會導致多個級聯路徑。這導致在SQL Server給了我下面的錯誤,當我試圖通過生成代碼EF首先數據庫:

表「事件」可能 事業週期或多個引進國外KEY約束「FK_dbo.Events_dbo.Tournaments_Tournament_Id」級聯路徑。指定ON DELETE NO ACTION或 ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

我瞭解,刪除一個Tournament時,這將是一個種族的ContestantEvent刪除與否觸發EventContestant刪除。 SQL Server不理解這一點。

現在的問題是,我的模型有什麼問題嗎?有沒有其他建模這些數據或一些配置,我可以做些什麼來解決這個問題?我想堅持以下要求:

  1. 一個Tournament的缺失必須級聯到EventContestantEventContestant
  2. 刪除的Event必須級聯到EventContestant
  3. 缺失Contestant必須級聯到EventContestant
  4. 參賽者和事件之間的關係是可選的(因此是0- *多重性)

我可以通過在EventContestant中引入一個單獨的主鍵來解決問題,而不是兩個導航屬性的組合鍵,但是隨後我會打破需求1到3.任何其他建議?

回答

1

現在的問題是,我的模型有什麼問題嗎?

不一定。在數據庫建模中,菱形依賴關係相當普遍。

問題是,MS SQL Server不支持這種依賴項上的自動引用操作,即使它們從邏輯角度來看可能是完全有效的情況。換句話說,你的工具比它應該更有限制。你需要use triggers才能實現級聯。