【问题标题】:If a primary key is NOT NULL, then should a foreign key that references it be specified also as NOT NULL?如果主键不是 NULL,那么引用它的外键是否也应该指定为 NOT NULL?
【发布时间】:2016-05-09 04:22:18
【问题描述】:

假设我有类似的东西

CREATE TABLE Foo (
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    .
    .
    .
);

CREATE TABLE Bar (
    .
    .
    foo_id INT REFERENCES Foo(id),
    .
    .
);

我应该/我应该有

foo_id INT NOT NULL REFERENCES Foo(id)

或者它所引用的值被保证为NOT NULL这一事实是否隐含?

【问题讨论】:

  • FK 是参考而非约束。

标签: sql sql-server tsql database-design


【解决方案1】:

Bar 上的外键列可以是 NULL,如果 Bar 记录可能存在但没有该值。

它所引用的值保证不为空

如果Bar 中的值是NULL,那么它根本就没有引用Foo 中的记录。它可以引用一条记录,但如果它允许NULL,则不必这样做。

【讨论】:

    【解决方案2】:

    不,这不是必须的,这是有目的的。您仍然可以将 NULL 值放入外键中,这意味着它实际上没有引用任何内容。

    【讨论】:

      【解决方案3】:

      这取决于,通常 FK 是在引用表的主键上创建的,因此在您的情况下,如果 foo_id 应该是一个 PK,那么它必须使用 NOT NULL 约束来定义,否则它可以允许 @987654323 @喜欢你现在的样子

      foo_id INT REFERENCES Foo(id)
      

      【讨论】:

        【解决方案4】:

        如果我正确理解您的问题,不。 主键必须不为空才能成为主键。

        外键可能为null没问题

        【讨论】:

          猜你喜欢
          • 2023-03-28
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 2017-04-21
          • 2017-01-29
          • 2018-02-06
          • 2022-11-21
          • 2015-03-16
          相关资源
          最近更新 更多