关于项目中使用系统统一序列还是单表独立序列

moonyuezhao 2010-03-22 09:24:46
1、先解释下名词,所谓系统统一序列即整个系统只有一个sequence,并使用这一个sequence生成的值当做所有数据的代理主键。单表独立序列指的是每个表建立一个序列,然后每个表使用自己的序列来作为代理主键。

2、关于这个问题,我和公司以前的几个同事分歧很大,主要是他们以前由独立序列转变为系统统一序列的理由过于牵强,而我使用独立序列的主要理由是因为我的习惯是将独立序列的前100个预留给特殊意义的数据,即虽然说是代理主键,但还是会保留部分的业务含义。同时,独立的序列在多个系统之间导数据我觉得都会占优势,总之,在之前我就压根没想过要用所谓的统一序列,也没遇见过,或许是我孤陋寡闻了。。。

3、不知道大家对此问题有什么看法,或者你们实际中是使用统一的还是独立的。
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonyuezhao 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 suiziguo 的回复:]

呵呵,如果说IT是服务业,那么数据库是为服务业中的服务业。


我还在为别人擦屁股呢,老系统,数据库不是我设计的,现在要改了。那叫一个面目全非……

不管是否合理,那家伙也折腾,你就得陪他玩儿。

最后,与君共缅——

接受:享受的开始。
[/Quote]

恩,是啊,做我们这个的,很多时候真的应了那句话了“改变不了别人,就只有改变自己了”,只是其中的得失,只有自己去感受了。
SambaGao 2010-03-22
  • 打赏
  • 举报
回复
我也是。一张表建一个序列

suiziguo 2010-03-22
  • 打赏
  • 举报
回复
呵呵,如果说IT是服务业,那么数据库是为服务业中的服务业。


我还在为别人擦屁股呢,老系统,数据库不是我设计的,现在要改了。那叫一个面目全非……

不管是否合理,那家伙也折腾,你就得陪他玩儿。

最后,与君共缅——

接受:享受的开始。
moonyuezhao 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 suiziguo 的回复:]

恩,很多时候,习惯决定处理方式。就像一表对一序列,这样看起来清爽,数据模型比较清晰。


从纯数据库角度来讲,统一序列也并非洪水猛兽。这样设计的目的,主要是简化、方便数据库的管理和维护吧。
[/Quote]

确实如此,其实如果不是因为我的设计中,序列有其他考虑,我也就随他们去了。

他们之前由独立序列修改为统一序列原因挺那个的,是因为开发人员copy代码的时候有些地方忘记修改序列,因此导致唯一性错误,所以干脆一刀切用个统一的。。。,现在我告诉他们,序列的前100个我有特殊用途,他们那个问题可以换一种方式解决,比如,序列指定为表名+ID这种明显的命名规则来避免....

我真正郁闷的是,本来新系统是由我负责的,可是以前的那个人还要当做很了不起的经验,偷偷绕过我,直接告诉这个新系统的开发人员,用统一序列。。。,真的相当恼火,把我的规划都打乱了,看来真想做点事情的话,还是需要在一定范围内的绝对权力的,否则真的会是什么事情都出现
suiziguo 2010-03-22
  • 打赏
  • 举报
回复
恩,很多时候,习惯决定处理方式。就像一表对一序列,这样看起来清爽,数据模型比较清晰。


从纯数据库角度来讲,统一序列也并非洪水猛兽。这样设计的目的,主要是简化、方便数据库的管理和维护吧。
iqlife 2010-03-22
  • 打赏
  • 举报
回复
如果你没有给这个序列做其它什么用途的话是没有什么区别的啊,
仅仅就是序列...统一还是单一都一样...
你想用它来做区分,例如取该表最大序列进行统计.........
moonyuezhao 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 suiziguo 的回复:]

没使用过统一序列,一直都是一张表或有关系的几张表使用同一序列。


另外,个人认为:序列只是数据库内部数据结构,不向前端展示,故不应该有业务含义或特殊意义。
[/Quote]

明白你的意思,不过我一直觉得什么事情都不要走极端好,所以虽然我设计的系统一般原则上都会使用无业务含义的代理主键,但序列我都会预留前100个出来,这样有时候解决具体问题的时候会非常方便,比如设置几个系统初始化的角色等,我就直接可以根据预留的序列判断出来,而不需要额外增加信息。

其实我说的保留,主要是指从开发角度,而不是从真正的业务角度,业务含义和序列扯上关系,会有不确定因素的出现,但是开发角度,则可以在可控制的范围内,方便很多方面的实现。
tangren 2010-03-22
  • 打赏
  • 举报
回复
如果ID没有任何语义上的意义,仅用来保证唯一,可以多个表共用。
如果有特殊的意义还单独使用吧。
甚至如果要每天复位,可以自建表用select * from tab for update来生成ID号。
suiziguo 2010-03-22
  • 打赏
  • 举报
回复
没使用过统一序列,一直都是一张表或有关系的几张表使用同一序列。


另外,个人认为:序列只是数据库内部数据结构,不向前端展示,故不应该有业务含义或特殊意义。

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧