2010-09-26 69 views

回答

3

對外鍵約束使用級聯運算符是一個熱門話題。從理論上講,如果您知道刪除父對象時也會自動刪除其所有子對象,那麼在子表和父表之間的鏈接上的級聯刪除可能是有意義的。

想象一下由「零件」組成的「機器」。如果您的邏輯說如果機器被刪除,組成該機器的所有零件也將從數據庫中清除,那麼您可以在零件表和機牀表之間的外鍵鏈接上使用級聯刪除選項。

但是:這可能有點棘手,特別是如果您最終擁有與此選項鍊接的整個鏈表。因此,很多開發人員傾向於在他們自己的數據訪問代碼中處理這個問題,而不是在數據庫中定義它。

更新級聯通常在父表上的主鍵更改時使用 - 以更新所有相關的子表和行以反映該更改。這通常被認爲是數據庫代碼異味 - 這裏更好的選擇是確保主鍵永不改變,從而不需要這種級聯更新 - 例如,通過在你的表中引入一個人爲的「代理」鍵列,這個列沒有商業相關的含義,因此永遠不會更新。

這有幫助嗎?你還不清楚哪些細節?我的看法是這樣的:雖然這在理論上是一個好主意,但大多數開發人員並不真正在「真實生活」中使用它 - 大多數開發人員會選擇在數據訪問代碼中處理這個問題,從而使它們充分和明確控制被刪除(或更新)的內容。

+0

感謝您的迴應,得到了級聯刪除/更新的想法。真的很感謝迴應。 – John 2010-09-26 15:15:58

0

除了marc_s說什麼..

我發現,當有這樣沒有必要延長交易時,使用更多的鎖CASCADE選項有時會產生「虛擬」更新子表,使用更多資源等