Erdmates Logo
Erdmates
返回博客
外键FK关系ERDSQL

彻底掌握外键与表关系

通过实战示例,学习外键(Foreign Key)概念和1:1、1:N、N:M关系设计方法。

2026年2月14日8 分钟阅读

什么是外键?

外键(Foreign Key, FK)是一种约束,表示一个表的列引用另一个表的主键。外键定义表间关系并保证参照完整性。

ON DELETE选项

  • RESTRICT(默认): 存在子记录时拒绝删除父记录
  • CASCADE: 删除父记录时同时删除子记录
  • SET NULL: 删除父记录时将子记录的FK设为NULL
  • NO ACTION: 类似RESTRICT,在事务结束时检查

三种表关系类型

1:1(一对一)关系

CREATE TABLE user_profiles (
  user_id UUID PRIMARY KEY,  -- 同时是FK和PK(保证1:1)
  full_name VARCHAR(200),
  bio TEXT,

  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

1:N(一对多)关系

CREATE TABLE orders (
  id UUID PRIMARY KEY,
  customer_id UUID NOT NULL,  -- FK在N端
  total_amount DECIMAL(15, 2) NOT NULL,

  FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE RESTRICT
);
CREATE INDEX idx_orders_customer ON orders(customer_id);

N:M(多对多)关系

必须通过中间表实现。

CREATE TABLE enrollments (
  student_id UUID NOT NULL,
  course_id UUID NOT NULL,
  enrolled_at TIMESTAMPTZ DEFAULT NOW(),
  grade VARCHAR(2),

  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE,
  FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE
);

自引用关系

同一表内的记录互相关联。

CREATE TABLE comments (
  id UUID PRIMARY KEY,
  post_id UUID NOT NULL,
  parent_id UUID,  -- NULL表示顶级评论
  content TEXT NOT NULL,

  FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
);

总结

外键和关系设计构成了数据库的骨架。理解三种基本关系模式(1:1、1:N、N:M),就能对任何领域的数据进行建模。

立即使用Erdmates开始

使用AI驱动的ERD编辑器开始数据库设计。免费使用。

免费试用演示免费开始

相关文章

bigint、UUID v4 还是 UUID v7?主键选择指南(含 PostgreSQL 18 的 uuidv7())

比较 bigint、UUID v4 和 UUID v7 主键的优缺点,介绍 PostgreSQL 18 内置的 uuidv7() 带来的变化,以及不同场景下的选择方法。

被AI代理读取的数据库:MCP时代的模式设计原则

AI代理通过MCP直接连接数据库的情况越来越多。本文整理如何设计名称、注释和约束,让代理不会误解模式,以及如何安全地划分权限。

PostgreSQL 19预览:影响模式设计与运维的变化(基于Beta 4)

以官方发布说明(Beta 4)为准,整理即将正式发布的PostgreSQL 19的变更中直接影响表设计、迁移和运维的内容。同时介绍在Beta阶段被撤回的功能,以及升级前需要确认的行为变化。

Erdmates Logo
Erdmates

使用自然语言设计数据库,通过AI驱动的ERD编辑器与团队实时协作。

服务

  • 功能介绍
  • 价格方案
  • 演示
  • SQL 转 ERD

资源

  • 博客
  • 帮助
  • 联系我们

法律声明

  • 服务条款
  • 隐私政策
  • 第三方提供
公司名称: Produx|代表人: 최정회
地址: 강원특별자치도 원주시 솔우물2길 4-1 (무실동)
电子邮件: master@erdmates.com
隐私保护负责人: 최정회|托管服务提供商: Amazon Web Services

© 2026 Produx. 版权所有。