oracle中DB设计时id唯一性(或者自增)怎么设置

乔哥 2013-03-08 08:22:35
最近刚使用oracle,不清楚oracle的id设计怎么比较合适,如果我使用序列的话,每一张表都要设计一个序列,感觉不合适吧,求助各位高手支招!!!
...全文
969 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
NLP爱好者 2013-03-08
  • 打赏
  • 举报
回复
引用 5 楼 tv151579 的回复:
引用 3 楼 lkz2004 的回复: 使用日期做序列,不也可以吗,比如 20130308102456 这样的序列还可以有规律,不仅可以了解数据的处理日期,每个日期到秒都是唯一的,不可能出现相同的时间,也可以连续,也可以不连续,并且有个好处: 1、当日后数据量变大,序列也不会变大,永远是这么几位数字, 2、当数据需要重新处理的时候,也不会出现序列重复出现,导致主键冲突 3、日期很好获取,……
可以再建立一个序列,和日期混合使用,这样就可以解决批量插入的问题了
乔哥 2013-03-08
  • 打赏
  • 举报
回复
引用 3 楼 lkz2004 的回复:
使用日期做序列,不也可以吗,比如 20130308102456 这样的序列还可以有规律,不仅可以了解数据的处理日期,每个日期到秒都是唯一的,不可能出现相同的时间,也可以连续,也可以不连续,并且有个好处: 1、当日后数据量变大,序列也不会变大,永远是这么几位数字, 2、当数据需要重新处理的时候,也不会出现序列重复出现,导致主键冲突 3、日期很好获取,不需要创建数据库……
如果批量插入的话,这个时间是不是会有重复的可能呀,或许在这个的基础上修改一下
老焦 2013-03-08
  • 打赏
  • 举报
回复
Orace没有SQL Server那样的自增序列。 我用ORACLE 10年了,都是自己对每个表单独建立一个 SEQUENCES 序列,然后再建一个触发器TRIGGERS 从不省懒。

CREATE SEQUENCE SEQ_S_MENU
  START WITH 1
  MAXVALUE 99999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  ORDER;

CREATE OR REPLACE TRIGGER tri_s_menu
  before insert ON S_MENU for each row
declare
  nextid number;
begin
  IF :new.menu_id IS NULL or :new.menu_id = '' THEN
    select SEQ_S_MENU.nextval into nextid from dual;
    :new.menu_id := nextid;
  end if;
end tri_s_menu;
/
这样针对每个表 成对 建立后,就跟SQL Server的自增序列差不多了。
NLP爱好者 2013-03-08
  • 打赏
  • 举报
回复
使用日期做序列,不也可以吗,比如 20130308102456 这样的序列还可以有规律,不仅可以了解数据的处理日期,每个日期到秒都是唯一的,不可能出现相同的时间,也可以连续,也可以不连续,并且有个好处: 1、当日后数据量变大,序列也不会变大,永远是这么几位数字, 2、当数据需要重新处理的时候,也不会出现序列重复出现,导致主键冲突 3、日期很好获取,不需要创建数据库对象
乔哥 2013-03-08
  • 打赏
  • 举报
回复
引用 1 楼 zhumingxu1984 的回复:
这个要根据你的业务吧,主键也可以由应用生成 每张表一个序列也并非不可,之后命名有规律,比如SQ_TABNAME,也未尝不可,还有,也可以多张表公用一个序列的
如果多个表共用一个序列的话,那么id的值是不是会不连续而且较大呢
zhumingxu1984 2013-03-08
  • 打赏
  • 举报
回复
这个要根据你的业务吧,主键也可以由应用生成 每张表一个序列也并非不可,之后命名有规律,比如SQ_TABNAME,也未尝不可,还有,也可以多张表公用一个序列的
没_没_没超疯 2013-03-08
  • 打赏
  • 举报
回复
如果要保持唯一性的话,不如使用sys_guid()好了,产生唯一编码。

17,140

社区成员

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

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