亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

何時/為什么在SQL Server中使用級聯?

何時/為什么在SQL Server中使用級聯?

慕勒3428872 2019-12-10 10:46:25
在SQL Server中設置外鍵時,在什么情況下應在刪除或更新時級聯它,其背后的原因是什么?這可能也適用于其他數據庫。我正在尋找每種情況的具體示例,最好是從成功使用它們的人那里獲得。
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

到目前為止我所看到的摘要:

  • 有些人根本不喜歡級聯。

級聯刪除

  • 當關系的語義可能涉及排他性的“是 ”描述的一部分時,級聯刪除可能很有意義。例如,OrderLine記錄是其父訂單的一部分,并且OrderLines永遠不會在多個訂單之間共享。如果Order消失,OrderLine也應該消失,沒有Order的行將成為問題。

  • 級聯刪除的典型示例是SomeObject和SomeObjectItems,在這種情況下,沒有相應的主記錄就不會存在項目記錄。

  • 你應該使用級聯刪除,如果你保存歷史或使用“軟/邏輯刪除”,您只設置一個刪除位列1 /真。

級聯更新

  • 當您在表之間使用實鍵而不是代理鍵(標識/自動增量列)時,級聯更新可能會很有意義。

  • 當您具有可變的外鍵(例如可以更改的用戶名)時,Cascade Update的典型示例。

  • 你應該使用級聯更新與被標識/自動增量列鍵。

  • 級聯更新最好與唯一約束結合使用。

何時使用級聯

  • 您可能希望在允許操作進行級聯之前從用戶那里獲得額外的確認,但這取決于您的應用程序。

  • 如果您錯誤地設置了外鍵,級聯會給您帶來麻煩。但是,如果您做對的話,您應該可以。

  • 在完全理解之前,使用級聯是不明智的。但是,它是一個有用的功能,因此值得花一些時間來理解。


查看完整回答
反對 回復 2019-12-10
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

外鍵是確保數據庫引用完整性的最佳方法。避免由于魔術而導致的級聯就像在匯編中編寫所有內容一樣,因為您不相信編譯器背后的魔術。

不好的是錯誤使用了外鍵,例如,向后創建外鍵。

胡安·曼努埃爾(Juan Manuel)的例子就是規范的例子,如果您使用代碼,則有更多的機會在數據庫中留下偽造的DocumentItem,這些東西會咬你。

級聯更新很有用,例如,當您通過可以更改的內容引用數據時,例如說用戶表的主鍵是名稱,姓氏組合。然后,您希望該組合中的更改傳播到引用的任何位置。

@Aidan,您所指的這種清晰度付出了高昂的代價,即有可能將虛假數據保留在數據庫中,這是不小的機會。對我而言,通常只是缺乏對DB的熟悉,并且在與DB合作之前無法找到哪些FK會加劇這種恐懼。要么,要么是不斷地濫用級聯,在實體在概念上不相關的地方,或者必須保留歷史的地方使用級聯。


查看完整回答
反對 回復 2019-12-10
?
米脂

TA貢獻1836條經驗 獲得超3個贊

我從不使用級聯刪除。

如果我想從數據庫中刪除某些內容,我想明確地告訴數據庫我要取出的內容。

當然,它們是數據庫中可用的功能,有時可能可以使用它們,例如,如果您有一個“ order”表和一個“ orderItem”表,則您可能希望在刪除某個表時清除它們。訂購。

我喜歡從代碼(或存儲過程)中獲得的清晰度,而不是發生“魔術”事件。

出于同樣的原因,我也不喜歡觸發器。

需要注意的是,即使您刪除了一個“訂單”,即使級聯刪除刪除了50個“ orderItem”,您也會得到“ 1行受影響”的報告。


查看完整回答
反對 回復 2019-12-10
  • 3 回答
  • 0 關注
  • 641 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號