我需要一个关于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;
在这种情况下,如果主要类别被删除,ON DELETE CASCADE将简单地删除所有子类别。这是推荐的方法吗?
答案 0 :(得分: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“SQL for Treesies中的树和层次结构”