关注获取更多:
你是否想过,为什么mysql要设置一个自增的主键,或者使用uuid生成一个和业务无关的主键id,在数据库设计中,主键是用来唯一标识每一行数据的关键。通常情况下,我们会选择与业务相关的字段作为主键,以确保数据的唯一性。然而,在某些情况下,使用与业务无关的主键可能更为合适,并且会带来一些额外的好处。
使用非业主字段做主键的好处:
- 解决业务变化和数据唯一性问题:
假设我们有一个表,其主键是由多个业务字段联合组成的,比如学校ID、班级ID和学生ID。然而,随着时间的推移,业务需求可能发生变化。例如,我们可能发现有的学生会留级,而留级后的学生可能会重复出现在数据中,通过上面三个字段不能唯一确认一条数据了,所以就要加一个年级id。这时候,我们发现如果有一个非业务字段作为主键,不会存在这个问题。
2,方便数据管理和维护,减少线上风险操作
有人说,我就有强迫症,就喜欢表里面的字段,都是有业务意义的,遇到上面问题,我再把年级id也加到里面,形成新的联合主键(学校id,班级id,学生id,年级id),这时候通常需要先删除原来的主键,然后再添加新的联合主键。这个过程不仅繁琐,而且可能会导致数据不一致或错误,并且实际的生产环境,删除主键再新添加主键会阻塞读写操作,导致系统崩溃,这是不可接受的。而通过添加一个与业务无关的主键,我们可以避免这种情况,简化数据管理和维护的过程。
3,提高查询效率:
除了确保数据的唯一性外,添加一个与业务无关的主键还可以带来查询性能的提升。我们可以通过在该主键上建立索引,来加速数据的检索和查询操作。特别是对于大型数据集和复杂查询场景,索引的使用可以显著提高查询效率。
4,保证历史数据的完整性:
当我们需要对已有的历史数据进行更新或调整时,可能会遇到一些挑战。例如,添加新的主键字段时,需要确保历史数据不会出现重复或缺失的情况。通过使用与业务无关的主键,我们可以更容易地处理这些问题,保证历史数据的完整性和一致性。