2012-12-04 69 views
0

在Oracle中我有一個名爲由三列的分類表:
ID =這是系統產生的唯一密鑰,
Catgeory_name =這是300字符, 和parent_id =,它們可能是-1,這意味着此類別不包含父代,或者它可能是前面描述的ID列中的值,作爲parent_id。數據庫設計刪除父和他的孩子在嵌套親子情況

問題是,當我刪除一個父類別,我需要自動刪除所有的孩子。我的問題是:SQL是否提供了自動執行此操作的任何方法,或者我應該在C#的上層語言中處理它。

例如,如果在兩個表之間存在外鍵情況,我知道SQL提供了ON DELETE CASCADE來刪除從屬記錄以及根據原始記錄的刪除請求刪除父記錄。

但是,我不知道有什麼方法可以自動處理上述情況,這意味着在上表中刪除父項時,所有子項也會被刪除。

在此先感謝您的幫助。

回答

2

如果parent_id設置爲NULL如果沒有父母,你可以定義在category外鍵,在category

SQL> create table category (
    2 id number primary key, 
    3 category_name varchar2(300), 
    4 parent_id number references category(id) 
    5 ); 

Table created. 

引用的主鍵,然後你可以聲明外鍵約束自動刪除父行被刪除時的子級。

如果你真的想用-1魔法值,表示沒有父母,而不是使用適當的NULL,你可能會插入一行到category表-1的id,然後創建外鍵約束。但是這比使用NULL要優雅得多。

+0

謝謝你的回答。我一直在嘗試測試它,但我無法弄清楚如何在C#中傳遞一個NULL,以便它仍然是DB中的NULL。如果你明白我的意思?所以,我一直無法嘗試你的答案,但在我看來,這是正確的。如果你知道這個問題的答案,我也非常感謝。再次感謝。 – user1298925

+0

@ user1298925 - 你如何在C#中傳遞參數?你在使用什麼API?實際上,你可能想創建一個新的問題來解決這個問題,因爲它似乎與這個問題無關。 –

+0

夠公平的,謝謝。 – user1298925