2011-06-06 63 views

回答

1

級聯事件真的很簡單。例如,假設您的User表具有屬性和主鍵username,而0123'表的屬性爲usernameemail address。現在很有可能我們可能會將的Email作爲User的參考(外鍵)到username,因爲我們希望每個有電子郵件的用戶也都在我們的User表中。現在想想如果你在User中刪除了一個用戶會發生什麼。是否應刪除Email中的所有匹配行?如果不是,你會怎麼做?一些DBMS會拋出一個錯誤,說「你不能這麼做!引用存在,我們不知道該怎麼處理它們!」。這是級聯事件的來源。如果DMBS支持級聯事件,則可以選擇指定DMBS是否實際引發該錯誤,或​​者可能刪除所有匹配(在Email中的username)行,因此沒有「懸掛「引用。這被稱爲級聯刪除。

還有其他級聯選項!如果我們嘗試將User中的username更新爲其他內容,則會發生另一個問題。沒有級聯選項,如果在Email中有匹配的行,我們可能會引發錯誤。但是通過級聯選項,我們可以選擇使用新的username自動更新Email中的username。這就是所謂的級聯更新。

這些是兩個主要的,但絕不是現有的一些DBMS中存在的「級聯」選項。

如果有幫助,可以將「級聯」修改看作「遞歸」修改,因爲它們是同義詞,是「級聯」的含義。修改「級聯」到使用相同屬性的其他表。

想想這個功能的優缺點。我們現在可以指定我們希望在不同表格中將「級聯」更改爲屬性時想要發生的事情。允許這些功能的一個可能的缺點是,我們現在有機會引起比我們想象的更大規模的修改(取決於設計)。在User中更改username可能會導致不同表中的更改Email,即使我們不打算!

希望這會有所幫助。