数据库表主键值的三种确定方式
数据库表主键值的三种确定方式
一般来说,数据库的表都有主键,建立主键可以使用自然关键字或人为关键字,但一般都使用人为关键字,因为自然关键字含有业务属性。
当我们确定了以人为关键字作表的主键时,其值的确定方式一般有三种:
1、完全由数据库端确定。就是使用identity列作主键,其优点是简单、方便、性能好。缺点是
a:当此键作为其他表的外键时,给数据的导入、合并带来极大的麻烦.
b:对于离线数据处理非常麻烦,虽然也有解决办法。
c:难以处理事务内部生成的自增列的值。
2、部分依赖于数据库端。使用最大号加1或键表方式。就是先从表中读取最大值,然后根据这个最大值作一些处理得到要插入的新记录的主键。或者干脆在数据库中见一个表,此表保存了各个表当前的最后的主键值。优点是不存在数据导入、合并的麻烦。
缺点是:
a:因为新的键值依赖于数据库中当前的键值,所以每生成一个主键要读一下数据库。除非在客户端缓存此信息并维护主键值的变化,这带来了复杂的处理。
b:对于离线数据处理非常麻烦,虽然也有解决办法。
c:并发问题。
3、完全在客户端生成主键值。一般采用自定义一个生成主键值的方法或者干脆用GUID,优点是不存在数据的导入合并的问题、离线数据处理的问题、并发的问题,缺点是具体操作表里的数据时,不如上面两种方式性能好。到底性能差多少,是这种方式采用的关键。
到底我们要采用哪种方式,要看具体场景,不同的情况用不同的方式。