想象一下描述文件系统中文件夹的 MySQL 表:
folder_id INT,
parent_folder_id INT,
folder_name VARCHAR(64)
我想添加一个约束 'parent_folder_id REFERENCES folder_id' 以确保数据库中没有死链接。
但如果文件夹位于顶层,则没有父文件夹,因此它应该为 NULL。据我所知,约束不允许我插入 parent_folder_id = NULL 的元组。
如何正确设计?
最佳答案
你可以只添加一个外键:
CREATE TABLE `folder` (
`folder_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`parent_folder_id` INTEGER UNSIGNED,
`folder_name ` VARCHAR(64) NOT NULL,
CONSTRAINT `PK_folder` PRIMARY KEY (`folder_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `folder` ADD CONSTRAINT `FK_folder_parent_folder`
FOREIGN KEY (`parent_folder_id`) REFERENCES `folder` (`folder_id`)
ON DELETE CASCADE ON UPDATE CASCADE;
当 parent_folder_id
为 NULL
时,外键约束不会生效。
关于mysql - 一个可能为 NULL 值的属性如何仍然引用 MySQL 中的另一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525754/