2009-09-01 38 views
10

是否一个外键引用主键需要在PostgreSQL数据库NOT NULL约束?
数据库是高度标准化的,将是非常大的。如果所述查询不需要,我不希望添加额外的约束,这会更慢地减慢查询。引用PK的外键是否需要NOT NULL约束?

+1

是在你的应用程序的速度真的比正确更重要?您不会意识到非空检查的成本。你的问题的答案是否定的,但我会指定已知的约束。 – 2009-09-01 18:49:15

回答

11

如果您希望能够在该表的FK列中表示未知,则将其设置为空,如果必须具有值,则使其不为空。

您可以使用空FK值在引用表中拥有尽可能多的记录。唯一性约束是在被引用表(其中PK是)的行不是引用表(其中FK是)的行。

+1

这是正确的。换句话说,它取决于你是建模1:N关系还是0..1:N关系。即关系是否可选? – 2009-09-01 18:45:57

+0

1:1的关系。我正在使用的表是一张桥表。 – WolfmanDragon 2009-09-01 18:55:23

+1

如果它是1:N那么FK列应该对它有Not Null约束。 – 2009-09-01 18:57:41

-1

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

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

因此,正如镇上提到的那样,NULL应该是有效的,但对于一条记录来说,因为唯一性将是更大的问题。

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

我已经把外部键放在null之前,但是如果你有级联删除例如那么null将不会工作,除非你的主键中有一个空值的键。

+2

OP问的“非空”约束上_FOREIGN_关键 – ChssPly76 2009-09-01 18:43:07