代码之家  ›  专栏  ›  技术社区  ›  Jagmag

在Oracle中,使用序列作为替代主键被认为是标准的

  •  2
  • Jagmag  · 技术社区  · 14 年前

    注意事项:

  • 首先让我澄清一下,这不是关于是否使用代理主键的问题。

  • 此外,这与身份(SQL Server)/序列(Oracle)及其优缺点无关。多亏了 this , this this

    问题:

    我来自一个SQL Server背景,并且总是使用标识列作为大多数表的代理主键。

    基于我对Oracle的了解,我发现Oracle中最接近的等价物是序列,可以用来模拟类似于SQL Server中标识的东西。

    由于我是Oracle的新手,我的数据库有100多个表,所以我最关心的是:

  • 考虑到我必须为Oracle中的每个表创建一个序列( 几乎 )这是用于模拟身份的标准可接受的实现,还是有更好/更容易的方法在Oracle中实现这种实现?
  • 有没有关于 太多了 Oracle中的序列?

    系统同时支持Oracle 10g和11g

  • 2 回复  |  直到 14 年前
        1
  •  2
  •   Tony Andrews    14 年前

    考虑到我必须创造一个 Oracle中每个表的顺序 (几乎),这是标准配置吗? 可接受的模拟实现 身份还是有更好/更容易的 实现这一目标的方法 在Oracle中实现?

    是的,在Oracle中,为每个表创建一个序列是非常典型的。可以对多个表使用相同的序列,但对于多个/所有表使用单个序列会有使其成为瓶颈的风险: see this AskTom q/a

    有什么特别的吗 与有如此多的序列有关 神谕?

    没有我能想到的。

        2
  •  2
  •   Jeffrey Kemp    14 年前

    100多张桌子不多。我经常使用具有数百个序列的数据库,每个表一个序列。越开心。

    甚至可以想象,序列比表多——与其他DBMS中的标识列不同,序列不仅仅可以用于创建代理项键值。

    另一种选择是使用guid-在Oracle中,可以调用sys_guid来生成唯一的值。

    一篇好文章,后面是对这两种方法的利弊评论: http://rwijk.blogspot.com/2009/12/sysguid.html