温馨提示×

温馨提示×

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

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

网站主键该如何设计

发布时间:2026-09-03 02:15:30 来源:亿速云 阅读:111 作者:小樊 栏目:数据库

网站(或一般业务系统)的“主键(Primary Key)”设计,其实没有唯一答案,但有一些成熟、通用、可落地的设计原则。下面从常见方案、适用场景、避坑建议三个层面来讲。


一、常见主键设计方案

1️⃣ 自增 ID(AUTO_INCREMENT / IDENTITY)

id BIGINT AUTO_INCREMENT PRIMARY KEY

优点

  • 简单、直观
  • 索引效率高(顺序写入)
  • 占用空间小

缺点

  • 暴露业务量(URL 中容易猜 ID)
  • 分库分表不方便
  • 多系统合并时易冲突

适用场景

  • 内部系统
  • 单库单表
  • 对安全性要求不高

2️⃣ UUID(UUID / GUID)

id CHAR(36) PRIMARY KEY

优点

  • 全局唯一
  • 可离线生成
  • 适合分布式系统

缺点

  • 无序,索引性能差
  • 占用空间大
  • 可读性差

适用场景

  • 分布式系统
  • 多端生成数据
  • 不依赖数据库

3️⃣ 雪花算法(Snowflake ID)✅ 推荐

64位整数:
符号位 | 时间戳 | 机器ID | 序列号

优点

  • 趋势递增(索引友好)
  • 全局唯一
  • 性能好
  • 适合分库分表

缺点

  • 依赖时间(时钟回拨需注意)
  • 实现稍复杂

适用场景

  • 中大型网站
  • 微服务
  • 高并发系统

4️⃣ 业务主键(不推荐单独使用)

PRIMARY KEY (order_no)

优点

  • 有业务含义

缺点

  • 易变更
  • 难以保证稳定
  • 关联成本高

建议

  • 业务字段只做唯一索引
  • 主键仍用无意义 ID

二、推荐的主流方案(实战)

✅ 最推荐组合

主键:雪花 ID(BIGINT)
业务号:order_no / user_code(唯一索引)

示例:

id        BIGINT PRIMARY KEY
user_code VARCHAR(32) UNIQUE

三、网站不同模块的主键建议

模块 推荐主键
用户表 雪花 ID
订单表 雪花 ID + 订单号
日志表 自增 / UUID
配置表 短字符串
分布式表 雪花 ID

四、常见坑(非常重要)

❌ 用手机号、邮箱当主键
❌ 用 UUID 当高频表主键
❌ 主键频繁变更
❌ 主键参与业务逻辑判断


五、一句话总结

网站主键设计原则:无意义、稳定、唯一、可扩展

如果你愿意,可以告诉我:

  • 网站规模(日活 / 并发)
  • 是否分库分表
  • 使用什么数据库(MySQL / PostgreSQL / MongoDB

我可以直接帮你给出具体表结构设计

向AI问一下细节

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

AI