如果与外键约束一起使用,“非空”约束是否多余?

时间:2019-10-17 06:53:09

标签: sql postgresql

以该列定义示例为例:

permission_id int not null references ugp_permissions (id)

在此示例中,not null约束是否多余?我认为是这样,因为提供的值必须与引用表匹配。但是,当引用的列上有空记录时,是否会将其归类为外键的匹配项?

3 个答案:

答案 0 :(得分:1)

在这种情况下这不是多余的,因为这样的约束可以避免遗漏permission_id。有时,您希望外键列为空,因为它不是必需的(就像不是公民表中的每个 citizen 都去过大学,所以university_id列可以为空)。在其他情况下,该列不应为null,就像每个学生应该与一个university_id相关联一样。

在这种情况下,permission_id是必需的,因为它是not null

披露:我为EnterpriseDB (EDB)工作

答案 1 :(得分:0)

当您省略“ not null”时,该值可以为null,但是当其不为null时,将根据引用的表进行检查。

答案 2 :(得分:0)

否,如果引用列上有空记录,则它们与外键不匹配。