在我們的Oracle 11g數據庫中,我們有一個表,其中有一個主鍵I_Node(int),還有一個名爲I_Parent_Node(int)的列,該列引用了另一條記錄在同一張桌子裏。根節點具有I_Parent_Node = null。通過這種方式,我們可以形成節點,樹葉,樹枝的樹狀結構,無論您想要調用它們。如何提高Oracle在自引用表中的刪除時間
我們經常需要一次刪除整個節點分支,即節點及其所有子節點。有時這是很多很多的記錄,比如說5萬或更多。由於級聯刪除不允許在自引用表上進行,因此我們不得不逐個從樹葉開始刪除並重新進行樹的備份。我們經歷了長達數小時的刪除時間。
我們正在考慮做一個「刪除標記」技術,其中一個單獨的程序將在非高峯時間清理標記爲刪除的節點,但我對數據庫設計更改或其他某種Oracle構造是否可以在這裏幫忙。除了我在工作中學到的知識外,我還沒有接受過Oracle的培訓,而創建數據庫的人並沒有如此大的數量。由於它還不是一個固定的設計,因此我願意接受數據庫設計更改。
你是什麼意思,「在自引用表上不允許級聯刪除」?似乎工作對我來說沒問題:'create table test1(I_Node number primary key,I_Parent_Node number,constraint test1_fk foreign key(I_Parent_Node)references test1(I_Node)on delete cascade);' – 2012-04-11 03:56:49