主键、外键与约束
主键、外键和约束之间不是并列孤岛,这篇关系笔记用来解释它们如何共同定义表内身份、跨表引用与数据合法性。
#type / synthesis
#status / growing
#tech / dev / backend
#resource / database
#resource / sql
[!info] related notes
主键、外键与约束
范围
这篇不再单独承担三个术语的定义,而是解释主键、外键和约束为什么要一起理解。
为什么要放在一起理解
初学数据库时,最容易把三者看成零散语法点:
- 先背主键是唯一标识
- 再背外键是两表关联
- 最后把约束当成若干零散关键字
但在实际建模里,它们共同定义的是:
- 表内如何识别一行
- 表与表如何建立可信引用
- 哪些状态被数据库视为合法
依赖路径 / 调用链 / 演进链
可以按这个顺序理解:
最小建模路径通常是:
- 先为每张表确定主键
- 再确定哪些列必须唯一、不能为空或满足检查条件
- 最后为跨表关系补上外键
对比与易混淆点
| 概念 | 它回答什么问题 | 典型形式 |
|---|---|---|
| [[constraint | 约束]] | 什么数据合法 |
| [[primary-key | 主键]] | 这一行是谁 |
| [[foreign-key | 外键]] | 这一行依赖谁 |
- 主键和外键都属于约束,不是平行于约束之外的另一套概念。
- 主键更多处理“身份”,外键更多处理“关系”,约束则是更上层的总类。
- 这三者只定义了结构边界,不自动替代 ER 模型 和表设计取舍。