很多时候,设计表
如
学生表
stuid(自增),stuno(带有可读信息的编号),stuname(学生姓名),...
学生选课表
一,id,stuid,cid(课程id),selecttime
-----------------
二,id,stuno,cid(课程id),selecttime
我看网上相关文章认为 主键应该遵循的原则
主键应当是对用户没有意义的 也就是说要选用stuid
但是很多时候,无论是前台查询,还是分析数据库查错等。都感觉没有使用stuno方便。
对于这个问题,大家在设计数据库时,会选哪一个种?
比如选择了stuid作为关连字段。
这时候业务人员说,你给我查一下stuno为S20180001的学生,总部选了几门课。
这时候你先要查出 stuno为S20180001的学生的 stuid,比如stuid为188
这时候,你在
select * from stuselect_course where stuid=188
--------------
如果你用的stuno 那就简单很多。
---------
这个纠结的问题,类似的比如订单表,订单表,由于很多原因,业务需要生成一个带有可读信息的一个字符串作为订单编号比如BJ2081071800001。而不是用id,1,2,3..给用户看。
学生表主键的选择对整个系统影响比较大,后面很多表都会参考学生表。个人觉得,学生表的主键还是用stuid比较好, 不建议用 stuno 做主键。原因:(1)主键一般都是聚集索引,数字字段索引更快。(2)用stuid做主键方便业务变更时,更方便。比如,stuid做主键,当修改stuno时只需修改学生表;当stuno需要加长时,也只需修改学生表。
stuid.无论是前台查询,还是分析数据库查错等你可以使用stuno.传参不同而已。
如果你确定编号唯一的话,那你就用编号当主键就好了,抛开业务场景谈设计都是扯淡
有道理,只要确认stuno是生成之后就不变的,其实用这个更省事。
只要你的表有个唯一的标示就可以 这个方便以后的一些处理
很多的时候,我们除了唯一标识之外,都还喜欢在多一个自动编号id
到于这个id有什么用?没有也可以,但我更喜欢加上。
@飞阿飞: 主键 自增 其实设计库 还是根据业务来的嘛 只要业务处理没什么问题 你的库 还不是你说了算