关于主键请教
1、数据库表不一定都要建立主键把,如果今天我只是写日志的表,是否没必要建立主键。
2、与主键对应的外键是否一定要建索引,不建不行吗?我听说是会导致锁
3、关于业务主键与逻辑主键(比如由序列生成的无意义记录),到底哪种更好,用逻辑主键要多一个字段记录有意义内容的东西,并且额该字段也要建非空唯一索引,对DML还是有开销的。
不过从代码角度来说,逻辑主键更方便写啊。
解答:from ID:newkid
1. 如果你永远不需要定位单行数据就可以不要主键。这种情况很罕见。
2. 如果外键没有索引,当父表删除或修改主键会对子表全表加锁。如果父表永远不删除数据、不修改主键,则外键可以不建索引。不单是加锁问题,外键缺失索引还可能影响表连接的性能。
3. 如果一个业务键能够保证唯一和终生不变则可以作为主键。做不到这一点就得用逻辑主键。如果业务键由很多列组成,也建议用逻辑主键,这样其他子表引用外键就比较方便。
[@more@]
1. 如果你永远不需要定位单行数据就可以不要主键。这种情况很罕见。
2. 如果外键没有索引,当父表删除或修改主键会对子表全表加锁。如果父表永远不删除数据、不修改主键,则外键可以不建索引。不单是加锁问题,外键缺失索引还可能影响表连接的性能。
3. 如果一个业务键能够保证唯一和终生不变则可以作为主键。做不到这一点就得用逻辑主键。如果业务键由很多列组成,也建议用逻辑主键,这样其他子表引用外键就比较方便。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8736435/viewspace-1032315/
,如需转载,请注明出处,否则将追究法律责任。