主键、外键与约束

主键、外键和约束之间不是并列孤岛,这篇关系笔记用来解释它们如何共同定义表内身份、跨表引用与数据合法性。

#type / synthesis #status / growing #tech / dev / backend #resource / database #resource / sql

[!info] related notes

主键、外键与约束

范围

这篇不再单独承担三个术语的定义,而是解释主键、外键和约束为什么要一起理解。

为什么要放在一起理解

初学数据库时,最容易把三者看成零散语法点:

  • 先背主键是唯一标识
  • 再背外键是两表关联
  • 最后把约束当成若干零散关键字

但在实际建模里,它们共同定义的是:

  • 表内如何识别一行
  • 表与表如何建立可信引用
  • 哪些状态被数据库视为合法

依赖路径 / 调用链 / 演进链

可以按这个顺序理解:

  1. 约束 是总集合,负责定义“哪些数据合法”
  2. 主键 是一种特殊约束,负责定义“这一行是谁”
  3. 外键 也是一种特殊约束,负责定义“这一行和别的表中的谁相关”

最小建模路径通常是:

  • 先为每张表确定主键
  • 再确定哪些列必须唯一、不能为空或满足检查条件
  • 最后为跨表关系补上外键

对比与易混淆点

概念它回答什么问题典型形式
[[constraint约束]]什么数据合法
[[primary-key主键]]这一行是谁
[[foreign-key外键]]这一行依赖谁
  • 主键和外键都属于约束,不是平行于约束之外的另一套概念。
  • 主键更多处理“身份”,外键更多处理“关系”,约束则是更上层的总类。
  • 这三者只定义了结构边界,不自动替代 ER 模型 和表设计取舍。
创建于 2026/5/3 更新于 2026/5/27