|
|
原帖由 evan_shen 于 2008-9-28 15:33 发表 ![]()
我认为这个问题其实并没有绝对的答案,如果是单一部署的我认为逻辑主键要好,但是分布式部署呢,看看以下的例子:
假如有这样一个系统,杭州、宁波、温州和浙江省等各部署一个一套库,各自一个库,互相不联网,其中有一个表的数据在各自的系统中作增加,在年底的时候都要导到省里的系统,这时候如果采用逻辑主键的话,杭州就有一条Id为100的记录,宁波或其他地方同样会有一条Id为100的记录,两条记录根本就没有关系,导入到省里以后两条记录就冲突了,id100不知道代表那条记录,这时候就要用业务主键在保证全省唯一,大家认为是逻辑还是业务好呢
目前 我们 遇到这样的问题 是这样处理的 xx||to_char(seq.nextval,'0000000000000000000')
比如 北京的数据就是 ‘01’||...
我们一般都是使用sequence 做主键,业务上需要保证唯一的加上uk
业务数据做主建的问题 我觉得下面的问题
1.如果数据需要修改会带来很多 麻烦 ,比如那身份证做人的 主键,但是身份证号码输入错了。
2.如果系统结构复杂的时候,引用层次比较多,可能出现主键列很多的情况,使得性能受到影响
3.如果业务上说这个列不是唯一的了 ,那就麻烦了
不过业务主键也有好处 ,比如查询的时候因为业务数据放到了引用表中,可能可以减少关联,
这一点,我们在使用 逻辑主键的时候有的时候是通过冗余数据解决的 |
|