postgresql - 子表中的外键列是否必须为 NOT NULL?
问题描述
我使用列组合作为主键并在子表中引用该主键。既然是多列的组合,那么子表中的所有列是否都需要用NOT NULL约束来定义呢?
例如,假设header
有一个主键和列 A、B 和 C 的散列函数,并且line
表有一个具有列 A、B 和 C 的散列函数的外键。那么列 A、子表中的 B 和 C 列都不是 NULL 吗?
解决方案
您应该查阅文档:
通常,如果引用行的任何引用列为空,则引用行不需要满足外键约束。如果将 MATCH FULL 添加到外键声明中,则仅当引用行的所有引用列都为 null 时才会满足约束(因此保证 null 和非 null 值的混合会导致 MATCH FULL 约束失败)。如果您不希望引用行能够避免满足外键约束,请将引用列声明为 NOT NULL。
也就是说,这是您可以做出的选择,具体取决于您允许或不想允许什么。
推荐阅读
- html - 电子邮件正文样式和 mailto 功能不起作用
- jquery - CKEDITOR mathjax 公式未在 jquery 中正确加载
- php - phpcs 的 Travis 配置仅适用于当前提交文件
- ajax - 未处理的拒绝(TypeError):无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文
- java - 通过 SSH 在远程机器上运行 jar 时未创建日志
- python - 如何使用 nltk.cluster.kmeans.KMeansClusterer 对句子进行聚类
- vue.js - 如何在 vuejs2 中使用 vee-validation 为输入字段编写自定义/通用验证
- ios - iOS图表:显示禁用轴的网格
- sql-server - Possible performance change if column NOT NULL UNIQUE CLUSTERED INDEX will be Primary Key
- android - 将文本视图插入到 Linearlayout 时出现 IndexOutOfBound 异常