在数据库中创建一个表的时候,是使用一个无业务意义的ID作为主键好呢,还是以具备业务意义且唯一的字段为主键好?(如果以无业务意义的ID为主键的话,则打算对业务字段创建索引)大家喜欢哪种方式作为主键呢?
建议唯一最好,至于业务意义看需求,因为关联关系不确定,唯一的话,关联不会出现问题,
两种都可以,需要根据具体业务场景决定,一般建议无业务意义的ID作为主键。
具有业务意义的字段可能存在维护,约束会带来一系列的性能问题;此外,业务字段的类型有时非INT类型,不适合做连接操作。
无意义的字段作为主键,就比较简单,而且不用考虑维护带来的影响。
以具备业务意义且唯一的字段为主键好。因为在创建主键时,该字段在表中是唯一的 ,而且还具有一定的业务意义,主要对单个表的查询,编辑,删除等比较方便。但是会存在一个不足之处,当多个表连接时,可能无法找到他们之间的关联。
正常情况下,两种方式都可以。个人比较常用无业务意义的ID作为主键,如果选用具备业务意义且具唯一的字段为主键,若主键具有“意义更改”的可能性,那么该主键就会满足不了要求。
具备业务意义且具唯一的字段例如:“用户登录信息表”中将“登录名”(英文名)作为主键,“订单表”中将“订单编号”作为主键,如此设计主键一般都是没什么问题,但如果订单表需要支持需求,即不支持需求的订单可以作废,并重新生成订单,而且订单号要保持原订单号一致,那将“订单编号”作为主键就满足不了要求了。
表通过主键来保证每条记录的唯一性,表的主键应当不具有任何业务含义,因为任何有业务含义的列都有改变的可能性。关系数据库学的最重要的一个理论就是:不要给关键字赋予任何业务意义。假如关键字具有了业务意义,当用户决定改变业务含义,也许他们想要为关键字增加几位数字或把数字改为字母,那么就必须修改相关的关键字。一个表中的主关键字有可能被其他表作为外键。就算是一个简单的改变,譬如在客户号码上增加一位数字,也可能会造成极大的维护上的开销。