MySQL优化之索引优化(十)

176 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

前言

上篇我们学习了MySQL中的数据库优化之索引优化。有兴趣的小伙伴可以阅读(MySQL优化之索引优化(九))。
下面我们继续学习MySQL中的数据库优化之索引优化。

业务字段做主键

为了能够唯一的标识一个会员的信息,需要为会员信息表设置一个主键。那么,如何设置一个合适的字段当主键呢?这里可以考虑使用业务字段做主键。
表数据中包含如下字段:

  • cardno卡号
  • membername名称
  • memberphone电话
  • memberpid身份证号
  • address地址
  • sex性别
  • birthday生日

这个表里,哪个字段比较合适做主键?

  • cardno卡号
    卡号看起来比较合适,因为会员卡号不能为空,而且有已唯一性,可以用来标识一条会员记录。不同的会员卡号对应不同的会员,字段cardno唯一的标识某一个会员。会员卡号与会员一一对应,可以使用。
    但实际上,会员卡号可能存在重复使用的情况,比如,某某退了自己的会员卡,不是会员了。但是,实际上这张会员卡还会给别人使用。卡号没变,但是使用者已经发生了变更。
    从系统设计上来看,这个变化只是修改了此表中对应卡号的会员信息,并不会影响到数据一致性。也就是说,修改此会员卡号的会员信息,系统的各个模块都会获取到修改后的会员信息,不会出现有的模块获取到修改之前的会员信息,有的模块获取到修改后的会员信息,从而导致系统内部数据不一致的情况。因此,从信息系统层面上看是没有问题的。
    但是从使用系统的业务层面来看,是有很大问题的,会对商家造成影响。
    假如需要查询之前会员的购买记录,修改会员信息后,查询到的只能是修改后的信息,但是这样的信息是错误的。所以使用会员卡号当做主键是不合适的。
  • memberphone电话和memberpid身份证号
    会员电话也不适合作为主键,在实际操作中,也存在更换手机号给别人使用的问题。
    身份证号貌似可以。因为身份证号不会重复,与人是一一对应的关系。但是身份证号属于个人隐私,会员不会提供。

所以建议尽量不要使用业务字段作为主键。

今天先学习到这里,明天继续。