是否一个外键引用主键需要在PostgreSQL数据库NOT NULL约束?
数据库是高度标准化的,将是非常大的。如果所述查询不需要,我不希望添加额外的约束,这会更慢地减慢查询。引用PK的外键是否需要NOT NULL约束?
回答
如果您希望能够在该表的FK列中表示未知,则将其设置为空,如果必须具有值,则使其不为空。
您可以使用空FK值在引用表中拥有尽可能多的记录。唯一性约束是在被引用表(其中PK是)的行不是引用表(其中FK是)的行。
这是正确的。换句话说,它取决于你是建模1:N关系还是0..1:N关系。即关系是否可选? – 2009-09-01 18:45:57
1:1的关系。我正在使用的表是一张桥表。 – WolfmanDragon 2009-09-01 18:55:23
如果它是1:N那么FK列应该对它有Not Null约束。 – 2009-09-01 18:57:41
主键必须是唯一的,理想情况下应由数据库挑选,以限制并发性问题,因此,虽然它对于1条记录可能是唯一的,但其他每条记录都必须有一个值。
否则,如果存在多个匹配项,您将如何知道该外键与哪个行相关?
因此,正如镇上提到的那样,NULL应该是有效的,但对于一条记录来说,因为唯一性将是更大的问题。
编辑:哎呀,误解了这个问题。
我已经把外部键放在null之前,但是如果你有级联删除例如那么null将不会工作,除非你的主键中有一个空值的键。
OP问的“非空”约束上_FOREIGN_关键 – ChssPly76 2009-09-01 18:43:07
- 1. 外键总是需要约束吗?
- 2. MySQL InnoDB总是需要每个外键约束的索引吗?
- 3. JPA是否需要外键
- 4. SQL Azure联合的外键约束是否需要在实际约束中使用tenantid?
- 5. 我是否需要设置约束?
- 6. 导航栏是否需要约束?
- 7. PK约束UPDATE
- 8. 外键约束
- 9. 外键约束
- 10. 外键约束
- 11. 如何强制引用约束(外键)
- 12. 自引用外键约束和删除
- 13. 使用GUI需要Postgres的外键约束?
- 14. 外键:与外键约束
- 15. UNIQUE约束是否在Sqlite中不需要显式索引?
- 16. 外键引用PK VS外键引用唯一键
- 17. 的MySQL(InnoDB的):需要删除列,以及伴随外键约束和索引
- 18. CakePHP&外键约束
- 19. SQL约束:外键
- 20. MySQL外键约束
- 21. 与外键约束
- 22. 与外键约束
- 23. 从外键约束
- 24. 外键约束 - Pentaho
- 25. SqlAlchemy外键约束
- 26. mysql外键约束
- 27. Netezza外键约束
- 28. 外键约束5
- 29. 外键约束SQL
- 30. SQLite外键约束
是在你的应用程序的速度真的比正确更重要?您不会意识到非空检查的成本。你的问题的答案是否定的,但我会指定已知的约束。 – 2009-09-01 18:49:15