Jan*_*ane 1 mysql sql foreign-keys
我有一个表文件夹,如果该文件夹具有父级,则该列的parent_id引用ID,如果没有,则parent_id为null。那是好的解决方案,还是该连接或其他解决方案需要额外的表?外键可以根本为null吗,如果可以,此解决方案将有更大的执行时间?
table folder(
id int primary key, //primary key in my table
parent_id int references id, //foreign key on id column in same table
....
)
Run Code Online (Sandbox Code Playgroud)
是的,可以使外键接受NULL值:
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)
Run Code Online (Sandbox Code Playgroud)
如果将外键设置为接受NULL值,则执行时间不受影响。
更新:在下面进一步评论:
请记住,B树索引对于高基数数据(即具有许多可能值的列,其中列中的数据是唯一的或几乎唯一的)最有效。如果您将拥有许多NULL值(或任何其他重复值),则查询优化器可能会选择不使用索引来过滤结果集的记录,因为这样做会更快。但是,此问题与列是否为外键无关。
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |