我有一个表文件夹,其中列parent_id 引用id(如果该文件夹有父级),如果没有,则parent_id 为空。这是好的解决方案还是我需要额外的表来进行此连接或其他解决方案?外键是否可以为空,如果可以,这个解决方案将有更长的执行时间?
table folder(
id int primary key, //primary key in my table
parent_id int references id, //foreign key on id column in same table
....
)
是的,可以使外键接受NULL
values:
CREATE TABLE folders (
id int NOT NULL PRIMARY KEY,
parent_id int NULL,
FOREIGN KEY (parent_id) REFERENCES folders (id)
) ENGINE=InnoDB;
Query OK, 0 rows affected (0.06 sec)
INSERT INTO folders VALUES (1, NULL);
Query OK, 1 row affected (0.00 sec)
如果外键设置为接受,则执行时间不受影响NULL
值与否。
UPDATE:进一步评论如下:
请记住,B 树索引对于高基数数据(即具有许多可能值的列,其中列中的数据是唯一或几乎唯一的)最有效。如果你会有很多NULL
值(或任何其他重复值)时,查询优化器可能会选择不使用索引来过滤结果集的记录,因为不使用索引会更快。然而,这个问题与该列是否是外键这一事实无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)