论坛首页 Java企业应用论坛

为了方便以后在各种数据库间移植,采用那种主键生成方式最好...

浏览 53024 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-10-28  
使代码改动量最少呢? 
   发表时间:2003-10-28  
<generator> 的class ,采用哪个最好呢?
是assigned, identify,还是 increment,  or  other!
0 请登录后投票
   发表时间:2003-10-28  
用uuix.hex最好,可移植性最好。
0 请登录后投票
   发表时间:2003-10-30  
robbin 写道
用uuix.hex最好,可移植性最好。


看文档上说,UUID算法产生的主键跟IP,JVM启动时间、系统时间以及counter value(计数器?)有关。我有一个疑问和一个担心:

uuid.hex的主键真的不会重复吗?

这种随机组合的符号成为主键,对某些sql操作无益,例如本来select语句就默认按主键的升序来组织返回结果,如果是uuid.hex式的主键,是不是可能第一条结果和第一百条在连在一起,排出来的序是杂乱的?
0 请登录后投票
   发表时间:2003-10-30  
借楼主题目说些别的。
关于主键的问题,我一直非常"迷惑"。现在不少设计者都将数据库当作比较纯正的数据仓库使用,关于主键由甚。主键我的理解主要是对数据唯一行的约束。所以在使用uuid和其他随机生成的主键有什么实际意义呢?那样只能保证你的数据主键不会重复,那么你主要数据的唯一性应该如何保证呢?所以我认为应该慎用随机主键,如果要用的主键的话就不要用随机的,应该对主要业务数据进行约束。由此我就越发不懂随机主键在数据库中存在的意义了。
0 请登录后投票
   发表时间:2003-10-31  
squirrel 写道
这种随机组合的符号成为主键,对某些sql操作无益,例如本来select语句就默认按主键的升序来组织返回结果,如果是uuid.hex式的主键,是不是可能第一条结果和第一百条在连在一起,排出来的序是杂乱的?


恐怕不是这样的吧! 我没有一个一个数据库去测试,但是我可以肯定的告诉你,Oracle就不是按照主键的升序来组织返回结果的,它是按照插入记录的先后顺序显示的(本质上是按照物理存储位置,又或者说按照rowid),所以你的猜想是没有根据的。
0 请登录后投票
   发表时间:2003-10-31  
grey_like 写道
借楼主题目说些别的。
关于主键的问题,我一直非常"迷惑"。现在不少设计者都将数据库当作比较纯正的数据仓库使用,关于主键由甚。主键我的理解主要是对数据唯一行的约束。所以在使用uuid和其他随机生成的主键有什么实际意义呢?那样只能保证你的数据主键不会重复,那么你主要数据的唯一性应该如何保证呢?所以我认为应该慎用随机主键,如果要用的主键的话就不要用随机的,应该对主要业务数据进行约束。由此我就越发不懂随机主键在数据库中存在的意义了。


错,如果是这样的话,还要unique干什么?

你考虑一下表之间存在很多的1:1和1:n的关系,你就会明白非业务主键的重要性了。
0 请登录后投票
   发表时间:2003-10-31  
如果把“业务主键”与“非业务主键”(估且这样称呼)
等同起来,那我们不要操作表间的关系,你可经想象有多复杂!如果只考虑业务数据的唯一性,在一个表就可能出
现多个字段同时做为主键,这样如果进行1:n或n:n查询
我不知道SQL会是什么样。
1 请登录后投票
   发表时间:2003-10-31  
robbin 写道
恐怕不是这样的吧! 我没有一个一个数据库去测试,但是我可以肯定的告诉你,Oracle就不是按照主键的升序来组织返回结果的,它是按照插入记录的先后顺序显示的(本质上是按照物理存储位置,又或者说按照rowid),所以你的猜想是没有根据的。


这个是我说错了,oracle默认是按物理存贮位置返回记录的。

但有很多时候,例如数据库里面的表大多数主键是sequence产生的时候,我们在select时,爱使用order by primary_key。这样的话随即主键是不能满足要求的。
0 请登录后投票
   发表时间:2004-01-13  
可以参考<ejb 设计模式>这本书。有一章专门描述主键生成, 里面也有uuid的描述
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics