当前位置:首页 > 问答 > 正文

数据库设计|关系型数据 数据库主键和外键简述及其简称

🔍 数据库设计小课堂:主键和外键的"身份证"与"介绍信"

场景引入
小张刚入职电商公司,看到数据库里密密麻麻的表关系直挠头🤯,老王拍拍他肩膀:"别慌!搞懂主键(PK)和外键(FK),你就摸到了关系型数据库的任督二脉!"


主键(PK):数据表的"身份证" 🆔

定义:主键(Primary Key)是表中唯一标识每行数据的字段,就像你的身份证号,不允许重复和空值。

典型特征

  • 唯一性:全表不允许重复(如用户ID不能有两个"U1001")
  • 非空性:必须填写(就像人不能没有身份证号)
  • ⚡️ 高性能:自动创建索引,查询速度嗖嗖的

常见用法

数据库设计|关系型数据 数据库主键和外键简述及其简称

CREATE TABLE users (
    user_id INT PRIMARY KEY,  -- 显式声明主键
    username VARCHAR(50) UNIQUE
);

花式主键

  • 自增整数(MySQL的AUTO_INCREMENT
  • UUID(像a1b2c3d4...的超长唯一码)
  • 复合主键(多个字段组合,如订单ID+商品ID

外键(FK):表之间的"介绍信" 💌

定义:外键(Foreign Key)是指向其他表主键的字段,用来建立表关系,就像部门介绍信要写明员工工号。

核心作用

  • 🔗 数据关联:比如订单表通过user_id关联用户表
  • 🛡️ 数据保护:防止乱删数据(有外键关联的主键不能被随意删除)
  • 🧩 数据完整:确保引用的数据必须存在(比如不会出现"不存在的用户ID")

实战示例

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(user_id)  -- 外键约束
);

外键的潜规则

数据库设计|关系型数据 数据库主键和外键简述及其简称

  • 外键字段名不必与主键相同(但建议保持风格一致)
  • 可以设置级联操作(如删除用户时自动删除其订单ON DELETE CASCADE

PK & FK 的经典CP组合 💑

1:多关系

  • 一个用户(PK)可以有多条订单(FK)
  • 像电商中的用户表订单表

多:多关系

  • 通过中间表实现,比如学生选课表:
    CREATE TABLE student_course (
        student_id INT REFERENCES students(id),
        course_id INT REFERENCES courses(id),
        PRIMARY KEY (student_id, course_id)  -- 复合主键
    );

避坑指南 ⚠️

  1. 不要滥用外键:高并发系统可能影响性能
  2. 命名要清晰:推荐pk_table/fk_table_field格式
  3. 慎用级联删除:避免误删重要数据(血泪教训!)


主键是数据的"身份证"(🆔 PK),外键是关系的"介绍信"(💌 FK),掌握它们,你就能让数据表从"散兵游勇"变成"纪律严明的军团"啦! 🎯

(注:本文基于2025年行业通用数据库设计实践整理)

发表评论