名词解释
业务主键:自然主键,将有业务逻辑的字段作为主键,比如订单号,身份证号等
逻辑主键:代理主键,生成一个与业务无关的数据作为主键,比如 sequence,uuid 等
使用业务主键
优点
- 简单易懂,容易理解,数据可读性高(尤其是作为外键的时候)
- 不引入另外字段
- 业务主键一般会在多个表存在,可以作为冗余数据,不易丢失
缺点
- 业务变化比较大,有可能出现主键变化的情况,关联表也要跟着变
- 业务变化比较大,有可能出现主键重复的情况
- 有时候需要多个业务字段联合起来才能作为主键
- 一般业务主键比较长,增加数据传输量
使用逻辑主键
优点
- 一般使用整数作为主键,效率高,数据量小
- 非业务数据,基本不会被修改
缺点
- 需要单独生成,增加系统复杂性
- 主键丢失,会丢失关联,很难找回
- 作为外键,数据可读性不高
分库分表
分库分表框架下,建议使用逻辑主键,优点除开上面所列,还有下面几项:
- 避免业务主键重复带来的热点数据过于集中,分片不均
- 避免业务主键生成规则带来的数据分片不均
- 业务主键修改导致数据需要换表甚至换库
- 使用 sequence 可以在扩容时,减小数据传输量,比如 4 表扩 8 表时,采用取模算法一半的数据不用动