温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何设计数据库Key键

发布时间:2026-09-21 17:42:17 来源:亿速云 阅读:100 作者:小樊 栏目:数据库

设计数据库的“Key(键)”是数据库建模和性能优化的核心环节。下面从概念分类 → 设计原则 → 实战建议 → 常见陷阱四个层面系统说明。


一、数据库中常见的 Key 类型

1. 候选键(Candidate Key)

  • 能唯一标识一行的最小属性组合
  • 一个表可以有多个候选键

2. 主键(Primary Key, PK)

  • 从候选键中选一个作为“官方唯一标识”
  • 特性:
    • 唯一(UNIQUE)
    • 非空(NOT NULL)
    • 尽量稳定(不频繁修改)

3. 外键(Foreign Key, FK)

  • 用于表与表之间的关联
  • 指向另一张表的主键或唯一键
  • 保证引用完整性

4. 唯一键(Unique Key)

  • 允许 NULL(视数据库而定)
  • 用于业务约束(如用户名、邮箱)

5. 代理键 vs 自然键

  • 自然键:业务本身存在的(如身份证号、订单号)
  • 代理键:系统生成的(如自增 ID、UUID)

二、主键设计原则(最重要)

✅ 1. 稳定性

  • 不要选会变的字段(如手机号、用户名)
  • 用户改资料 ≠ 改主键

✅ 2. 简洁性

  • 主键越小,索引越快
  • 推荐:
    • 整数(INT / BIGINT)
    • 自增或雪花 ID

✅ 3. 无序性(针对分布式)

  • MySQL InnoDB:主键影响聚簇索引
  • 避免:
    • UUID(随机写入导致页分裂)
  • 推荐:
    • 雪花算法(趋势递增)

三、主键设计方案对比

方案 优点 缺点 适用场景
自增 ID 简单、快 不适合分布式 单体系统
UUID 全局唯一 索引大、慢 少表关联
雪花 ID 分布式友好 略复杂 微服务
业务自然键 语义清晰 易变 配置表

四、外键设计建议

✅ 建议

  • 核心系统:使用外键保证一致性
  • 高并发系统:可“逻辑外键”(代码层维护)

❌ 不推荐

  • 外键指向大文本字段
  • 外键频繁更新

五、复合键(联合键)设计

使用场景

  • 多对多关系表
  • 配置表
PRIMARY KEY (user_id, role_id)

注意

  • 字段顺序影响索引使用
  • 常用查询字段放前面

六、常见错误 ❌

  1. 用手机号做主键(会换号)
  2. 用字符串当主键(性能差)
  3. 主键参与业务逻辑
  4. 忽视索引顺序

七、一个标准示例

CREATE TABLE user (
  id BIGINT PRIMARY KEY,
  username VARCHAR(50) UNIQUE,
  email VARCHAR(100) UNIQUE
);

CREATE TABLE order (
  id BIGINT PRIMARY KEY,
  user_id BIGINT,
  FOREIGN KEY (user_id) REFERENCES user(id)
);

如果你有具体业务场景(如电商、日志、物联网、用户系统),我可以给你更针对性的 Key 设计方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手