在2005年MSSQL我只是擊中了臭名昭著的錯誤消息:外鍵級聯多路徑和週期有什麼問題?
上表YYY引進國外KEY約束XXX可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。現在
,StackOverflow上具有有關此錯誤消息的幾個話題,所以我已經得到了解決(在我來說,我將不得不使用觸發器),但我很好奇,爲什麼有這樣的問題。
據我所知,基本上有兩個他們想要避免的情況 - 一個循環和多個路徑。一個循環是兩個表彼此級聯外鍵的地方。好的,一個循環也可以跨越幾個表格,但這是基本情況,並且將更容易分析。
當TableA具有TableB和TableC的外鍵並且TableB也具有TableC的外鍵時,將有多條路徑。再次 - 這是最基本的情況。
我看不到在任何一個表中記錄被刪除或更新時會出現的任何問題。當然,您可能需要多次查詢同一個表以查看哪些記錄需要更新/刪除,但這確實是一個問題嗎?這是一個性能問題?
在其他SO主題中,人們甚至使用級聯標籤作爲「risky」並聲明「resolving cascade paths is a complex problem」。爲什麼?風險在哪裏?哪裏有問題?
用觸發器代替它會更好嗎?當然 - 有這樣一種方法,「根本不使用外鍵」和做代碼的所有事情。我不認爲我需要告訴你爲什麼我認爲這是一個壞主意...... – 2009-10-30 10:28:05