3 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
到目前為止我所看到的摘要:
有些人根本不喜歡級(jí)聯(lián)。
級(jí)聯(lián)刪除
當(dāng)關(guān)系的語義可能涉及排他性的“是 ”描述的一部分時(shí),級(jí)聯(lián)刪除可能很有意義。例如,OrderLine記錄是其父訂單的一部分,并且OrderLines永遠(yuǎn)不會(huì)在多個(gè)訂單之間共享。如果Order消失,OrderLine也應(yīng)該消失,沒有Order的行將成為問題。
級(jí)聯(lián)刪除的典型示例是SomeObject和SomeObjectItems,在這種情況下,沒有相應(yīng)的主記錄就不會(huì)存在項(xiàng)目記錄。
你應(yīng)該不使用級(jí)聯(lián)刪除,如果你保存歷史或使用“軟/邏輯刪除”,您只設(shè)置一個(gè)刪除位列1 /真。
級(jí)聯(lián)更新
當(dāng)您在表之間使用實(shí)鍵而不是代理鍵(標(biāo)識(shí)/自動(dòng)增量列)時(shí),級(jí)聯(lián)更新可能會(huì)很有意義。
當(dāng)您具有可變的外鍵(例如可以更改的用戶名)時(shí),Cascade Update的典型示例。
你應(yīng)該不使用級(jí)聯(lián)更新與被標(biāo)識(shí)/自動(dòng)增量列鍵。
級(jí)聯(lián)更新最好與唯一約束結(jié)合使用。
何時(shí)使用級(jí)聯(lián)
您可能希望在允許操作進(jìn)行級(jí)聯(lián)之前從用戶那里獲得額外的確認(rèn),但這取決于您的應(yīng)用程序。
如果您錯(cuò)誤地設(shè)置了外鍵,級(jí)聯(lián)會(huì)給您帶來麻煩。但是,如果您做對的話,您應(yīng)該可以。
在完全理解之前,使用級(jí)聯(lián)是不明智的。但是,它是一個(gè)有用的功能,因此值得花一些時(shí)間來理解。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
外鍵是確保數(shù)據(jù)庫引用完整性的最佳方法。避免由于魔術(shù)而導(dǎo)致的級(jí)聯(lián)就像在匯編中編寫所有內(nèi)容一樣,因?yàn)槟幌嘈啪幾g器背后的魔術(shù)。
不好的是錯(cuò)誤使用了外鍵,例如,向后創(chuàng)建外鍵。
胡安·曼努埃爾(Juan Manuel)的例子就是規(guī)范的例子,如果您使用代碼,則有更多的機(jī)會(huì)在數(shù)據(jù)庫中留下偽造的DocumentItem,這些東西會(huì)咬你。
級(jí)聯(lián)更新很有用,例如,當(dāng)您通過可以更改的內(nèi)容引用數(shù)據(jù)時(shí),例如說用戶表的主鍵是名稱,姓氏組合。然后,您希望該組合中的更改傳播到引用的任何位置。
@Aidan,您所指的這種清晰度付出了高昂的代價(jià),即有可能將虛假數(shù)據(jù)保留在數(shù)據(jù)庫中,這是不小的機(jī)會(huì)。對我而言,通常只是缺乏對DB的熟悉,并且在與DB合作之前無法找到哪些FK會(huì)加劇這種恐懼。要么,要么是不斷地濫用級(jí)聯(lián),在實(shí)體在概念上不相關(guān)的地方,或者必須保留歷史的地方使用級(jí)聯(lián)。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
我從不使用級(jí)聯(lián)刪除。
如果我想從數(shù)據(jù)庫中刪除某些內(nèi)容,我想明確地告訴數(shù)據(jù)庫我要取出的內(nèi)容。
當(dāng)然,它們是數(shù)據(jù)庫中可用的功能,有時(shí)可能可以使用它們,例如,如果您有一個(gè)“ order”表和一個(gè)“ orderItem”表,則您可能希望在刪除某個(gè)表時(shí)清除它們。訂購。
我喜歡從代碼(或存儲(chǔ)過程)中獲得的清晰度,而不是發(fā)生“魔術(shù)”事件。
出于同樣的原因,我也不喜歡觸發(fā)器。
需要注意的是,即使您刪除了一個(gè)“訂單”,即使級(jí)聯(lián)刪除刪除了50個(gè)“ orderItem”,您也會(huì)得到“ 1行受影響”的報(bào)告。
- 3 回答
- 0 關(guān)注
- 637 瀏覽
添加回答
舉報(bào)