oracle中的級聯刪除(轉)

BSDLite發表於2007-08-16
oracle中的級聯刪除(轉)[@more@]在oracle中,建立表之間的外來鍵關聯時,有個“on delete cascade”選項,應用這個選項可以在父表記錄刪除時,自動刪除子表中的相應記錄。但是這個選項十分危險,我在google上搜了一圈,發現實際使用這個選項的並不多,都是擔心誤刪重要資料。


但是有時又的確需要這樣的級聯刪除功能,避免繁瑣的delete操作。我想到了一個利用資料字典表進行自動級聯刪除的辦法,不過由於較複雜,暫時還沒實現。思路如下:

1、採用遞迴的方式從父表出發,逐級查詢子表;

2、從最底層的子表開始,依次更改其外來鍵為“on delete cascade”方式;

3、從父表刪除記錄;

4、逐層恢復原有外來鍵。


其實如果表的數量不太多,關聯層次不復雜,完全可以手工刪除或者使用儲存過程/指令碼用靜態SQL的方式進行刪除,而不必按照上述方法進行“自動”刪除。
這裡又牽扯到一個資料庫的設計問題,我個人認為,表之間的關聯關係不宜太複雜,在資料庫層面應該儘可能劃分模組,關聯關係應該僅存在於模組內部。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-961520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章