Database design 引用PK的外键是否需要NOTNULL约束?

Database design 引用PK的外键是否需要NOTNULL约束?,database-design,postgresql,Database Design,Postgresql,引用主键的外键在PostgreSQL数据库中是否需要NOTNULL约束? 数据库高度规范化,将非常大。如果不需要上述查询,我不希望添加额外的约束,这将进一步降低查询速度。主键必须是唯一的,最好由数据库选择,以限制并发问题,因此,尽管主键可以是唯一的,但对于1条记录,其他每一条记录都必须有一个值 否则,如果存在多个匹配项,您将如何知道该外键与哪一行相关 因此,正如NewIn town提到的,NULL应该是有效的,但对于一条记录,唯一性将是更大的问题 编辑:哎呀,误解了这个问题 我以前在外键上设置过

引用主键的外键在PostgreSQL数据库中是否需要NOTNULL约束?

数据库高度规范化,将非常大。如果不需要上述查询,我不希望添加额外的约束,这将进一步降低查询速度。

主键必须是唯一的,最好由数据库选择,以限制并发问题,因此,尽管主键可以是唯一的,但对于1条记录,其他每一条记录都必须有一个值

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

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

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


我以前在外键上设置过null,但是如果您使用了cascade delete,那么null将不起作用,除非您的主表中的键具有null值。

如果您希望能够在该表的FK列中表示unknown,则将其设为null,如果必须有值,则将其设为非null


在引用表中,可以有任意数量的记录,且FK值为空。唯一约束位于引用表(其中PK为)中的行上,而不是位于引用表(其中FK为)中的行上

OP询问外键上的“NOTNULL”约束这是正确的。换句话说,这取决于您是在模拟1:N关系还是0..1:N关系。i、 e.关系是否可选?1:1关系。我正在处理的表是一个桥接表。如果它是1:N,那么FK列应该有NOTNULL约束。在您的应用程序中,速度真的比正确性更重要吗?您不会意识到非空支票的成本。你的问题的答案是否定的,但我会指定任何已知的约束条件。