1.自然主键是指事物属性中的自然唯一标示(例如身份证号)
2.代理主键是指与业务无关的,无意义的数字序列值
3.在表设计时,优先推荐代理主键,不推荐自然主键(代理主键无意义,所以与业务解耦,另一方面,自然主键是自然界的事物,一般为字符串,处理很麻烦)
身份证 | 姓名 |
111 | 李梅 |
222 | 寒霜 |
例如身份证为主键:
如果界面点删除,其实并不是对表进行删除,因为员工信息表是核心业务,可能有其他的表对它进行引用,所以前台删除对应一个额外字段(是否删除):
身份证 | 姓名 | 是否删除 |
111 | 李梅 | 否 |
222 | 寒霜 | 否 |
身份证 | 姓名 | 是否删除 |
111 | 李梅 | 是 |
222 | 寒霜 | 否 |
如果李梅离开公司之后,又回到公司,此时不能入职:
身份证 | 姓名 | 是否删除 |
111 | 李梅 | 是 |
222 | 寒霜 | 否 |
111 | 李梅 | 否 |
如果把身份证和是否删除设置为联合主键,一则处理繁琐,二则会出现问题,例如,李梅此时又离开公司,要办理离职手续,此时联合主键冲突,不能办理离职手续:
身份证 | 姓名 | 是否删除 |
111 | 李梅 | 是 |
222 | 寒霜 | 否 |
111 | 李梅 | 是 |
通过代理主键,即可完成重复入职、离职业务功能:
员工编号 | 身份证 | 姓名 | 是否删除 |
1 | 111 | 李梅 | 是 |
2 | 222 | 寒霜 | 否 |
3 | 111 | 李梅 | 是 |