【问题标题】:Does a Foreign Key referencing PK need the NOT NULL constraint?引用 PK 的外键是否需要 NOT NULL 约束?
【发布时间】:2010-11-24 17:37:12
【问题描述】:

在 PostgreSQL 数据库中引用主键的外键是否需要 NOT NULL 约束?
数据库是高度规范化的,并且会非常大。如果不需要所述查询,我​​不希望添加额外的约束,这会进一步减慢查询速度。

【问题讨论】:

  • 在您的应用程序中,速度真的比正确性更重要吗?您不会意识到非空检查的成本。你的问题的答案是否定的,但我会指定任何已知的约束。

标签: database-design postgresql


【解决方案1】:

如果您希望能够在该表的 FK 列中表示未知数,则将其设为可为空,如果必须有值,则将其设为 Not Null。

您可以在引用表中使用空 FK 值拥有任意数量的记录。唯一约束在引用表(PK 所在的位置)中的行上,而不是引用表(FK 所在的位置)中的行上。

【讨论】:

  • 这是正确的。换句话说,这取决于您是在建模 1:N 关系还是 0..1:N 关系。即关系是可选的吗?
  • 1:1 关系。我正在处理的表是一个桥接表。
  • 如果是 1:N 那么 FK 列应该有 Not Null 约束。
【解决方案2】:

主键必须是唯一的,理想情况下它应该由数据库选择,以限制并发问题,因此,虽然它可以是唯一的,但对于 1 条记录,其他每条记录都必须有一个值。

否则,如果有多个匹配项,您如何知道该外键与哪一行相关?

因此,正如 New in town 所提到的,NULL 应该是有效的,但对于一条记录,唯一性将是更大的问题。

编辑:哎呀,误解了这个问题。

我之前在外键上放了 null,但是如果你有级联删除,那么 null 将不起作用,除非你在主表中有一个具有 null 值的键。

【讨论】:

  • OP 询问 FOREIGN 键上的“非空”约束
猜你喜欢
  • 1970-01-01
  • 2010-12-15
  • 2021-02-10
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2017-09-21
相关资源
最近更新 更多