最近在作数据库设计的时候(以MySQL为主),遇到很多困惑,由于以前作数据库表设计,基本上主键都是使用自增的形式,最近由于这种作法,被领导指出存在一些不足,因而我想搞明白哪里不足。
html
经过网上查阅资料,得出一个这样的结论:
表的主键通常都要使用自增 id,不建议使用业务id ,是由于使用自增id能够避免页分裂。mysql
按照我过去的实践:
选择使用自增能够避免不少麻烦,主要体现是数据的惟一性(从1到xxx,确定不会重复的)。sql
这块我没看太明白,我主要参考以下连接:
一看就懂的:MySQL数据页以及页分裂机制数据库
为何?mysql不推荐使用uuid或者雪花id做为主键?服务器
拖库:指黑客经过各类社工手段、技术手段将数据库中敏感信息非法获取,通常这些敏感信息包括用户的帐号信息如用户名、密码;身份信息如真实姓名、证件号码;通信信息如电子邮箱、电话、住址等。架构
参考连接:
MySQL主键应该用UUID仍是INT类型数据库设计
简要归纳UUID的适用场景:主要适合用在大型项目微服务架构中,保证全局ID惟一性(大型项目微服务架构集成各式各样的子系统,避免ID冲突)。性能
起初我在数据表设计的时候就与项目经理争论过,挺相似这个连接的对话:UUID与数字ID的区别与适用场景ui
指用2个或者是2个以上的字段组成的主键,用这个主键包含的字段做为主键,这个组合在数据表中是惟一,且附加上了主键索引。
我能想到一个用户信息,针对某个一个区域若是用用户ID或用户ID+用户姓名做为主键,难以保持数据的惟一性,由于这一个地区不只仅是有一个小马哥,可能有七八我的,如此,前面提到的用户ID或用户ID+用户姓名显然是行不通的,这时能够把身份证加入主键,变成了用户ID+用户姓名+身份证(造成了一个联合主键),这样一来该用户数据的惟一性获得了验证。固然了,联合主键的场景不只仅是这个,关键看业务场景。
从外包公司->创业公司->教育公司->如今所在公司,回过头来看过去个人数据表设计方面,存在的一个最大不足,即着重考虑技术实现难易层面,而轻视业务场景适用性、扩展性、稳定性等。