parent_id外键(自引用)和null?

时间:2017-07-06 09:45:35

标签: mysql sql database-design

通过Bill Karwin的书“SQL Antipatterns”,第3章,Naive Trees(邻接表,亲子关系),有一个评论表的例子。

CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
parent_id BIGINT UNSIGNED,
comment TEXT NOT NULL,
FOREIGN KEY (parent_id) REFERENCES Comments(comment_id)
);

示例数据

| comment_id | parent_id | comments
|------------| ----------|-------------------------------------
|1           | NULL      |What’s the cause of this bug?
|2           | 1         |I think it's a null pointer
|3           | 2         |No, I checked for that
|4           | 1         |We need to check for invalid input
|5           | 4         |Yes,that's a bug
|6           | 4         |Yes, please add a check
|7           | 6         |That fixed it

该表有一个comment_id,parent_id和一个注释列。 parent_id是引用comment_id的外键。

comment_id自动增量从1开始。

问题。

如果parent_id应该是引用comment_id的外键,那么当具有外键的目的是确保引用完整性时,具有comment_id = 1的行如何具有parent_id null / 0。

注意:我按原样创建了表,并尝试输入数据并收到此错误

  

#1452 - 无法添加或更新子行:外键约束失败(`category``comments`,CONSTRAINT`Reviews_ibfk_1` FOREIGN KEY(`parent_id`)REFERENCES`comment`(`comment_id`))< / p>

1 个答案:

答案 0 :(得分:3)

从CW答案中的上述评论中收集一些结论。