2013-05-09 130 views
1

我需要ON DELETE CASCADE是否適合的建議下表ON DELETE CASCADE在這種情況下?

CREATE TABLE category 
(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(255) NOT NULL, 
    maincategory INT DEFAULT NULL, 
    FOREIGN KEY(maincategory) REFERENCES category(id) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

在使用在這種情況下,DELETE CASCADE會簡單地刪除所有子類,如果主類別獲取deleted.Is該建議的方法?

+0

如果您在說ab只有這個東西是的,我認爲它很好。但有時你需要做一個假刪除(帶有一個名爲isDeleted的列),當你這樣做。 ON DELETE CASCADE不會再造成問題,所以我說這樣做。 – ncm 2013-05-09 19:25:55

回答

1

您正試圖創建樹結構的表格表示形式。您正在使用鄰接模型,將父項的ID存儲在maincategory字段中(通常稱爲parent_id)。

是的,這種方法是完全有效的。使用ON DELETE CASCADE您可以保護自己免於DELETE異常。

我也建議你閱讀有關嵌套套 - 這是在SQL代表樹木非常有效的技術:

http://www.evanpetersen.com/item/nested-sets.html

How to represent a data tree in SQL?

http://en.wikipedia.org/wiki/Nested_set_model

這本書: Joe Celko「用於Smarties的SQL中的樹和層次結構」

+0

謝謝,很好的回答!我的桌子有類似的設計問題,也許你可以幫我嗎?我有一個引用類別表的產品。現在,我已經在產品表FOREIGN KEY category_id中設置了ON DELETE SET NUL和ON UPDATE CASCADE,所以當類別被刪除時,產品仍然保留在表格中,這是否聰明?再次感謝。 – Zed 2013-05-09 20:18:15

+0

@Zed如果您希望在刪除類別後保留產品,則此方法是正確的。如果沒問題,請接受答案。 – user4035 2013-05-09 20:25:20