【问题标题】:Can foreign key references contain NULL values in PostgreSQL?PostgreSQL 中的外键引用可以包含 NULL 值吗?
【发布时间】:2015-03-28 04:16:31
【问题描述】:

举个例子

create table indexing_table
(
  id SERIAL PRIMARY KEY,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
);

以下表格有区别吗?

表 1:

create table referencing_table
(
  indexing_table_id INTEGER references indexing_table
);

表 2:

create table referencing_table
(
  indexing_table_id INTEGER references indexing_table NOT NULL
);

或者,在表 1 的情况下,没有NOT NULL 约束,我们是否允许插入包含NULL 值的记录?

【问题讨论】:

    标签: postgresql reference foreign-keys primary-key


    【解决方案1】:

    对于表 1,此 INSERT 语句将成功。如果你运行它 100 次,它会成功 100 次。

    insert into referencing_table values (null);
    

    相同的 INSERT 语句将在表 2 上失败。

    错误:“indexing_table_id”列中的空值违反非空约束 详细信息:失败行包含(空)。

    【讨论】:

      【解决方案2】:

      有时您希望外键列可以为空,因为它不是必需的(就像不是公民表中的每个 citizen 都上过大学,所以 university_id 列可以为空) .在其他情况下,该列不应为空,就像每个 student 都应该与 university_id 相关联。

      因此,如果您考虑要实现的目标,那么您描述的两个referencing_tables 实际上是非常不同的。

      【讨论】:

        猜你喜欢
        • 2013-05-09
        • 2014-06-13
        • 2019-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2016-06-21
        • 1970-01-01
        相关资源
        最近更新 更多