在Oracle中,使用Sequences作为标准的代理主键

时间:2010-09-24 10:15:02

标签: oracle10g oracle11g sequences

注意事项:

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

  • 此外,这与身份(SQL Server)/序列(Oracle)及其优缺点无关。感谢thisthisthis

    ,我确实对此有了一些了解。

    问题:

    我来自SQL Server后台,并且始终使用标识列作为大多数表的代理主键。

    根据我对Oracle的了解,我发现Oracle中最接近的等价物是SEQUENCES,可以用来模拟类似于SQL服务器中的Identity的内容。

    由于我是Oracle的新手,我的数据库有100多个表,我关注的主要问题是: -

  • 考虑到我必须为Oracle中的每个表创建一个序列(几乎),这是模拟身份的标准接受实现还是在那里在Oracle中实现这种实现的更好/更简单的方法?
  • 是否有任何特定的GOTCHA与Oracle中这么多序列相关?

    系统支持Oracle 10G和11G

  • 2 个答案:

    答案 0 :(得分:2)

      

    考虑到我必须创建一个   Oracle中每个表的序列   (差不多),这会是标准吗​​?   接受了模拟的实现   身份还是更好/更容易   实现这种方式的方式   在Oracle中实现?

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

      

    是否有任何特定的GOTCHA   与有这么多序列有关   甲骨文?

    我无法想到。

    答案 1 :(得分:2)

    100多个表并不是很多。我经常处理具有数百个序列的数据库,每个表一个。越多越好。

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

    另一种方法是使用GUID - 在Oracle中,您可以调用SYS_GUID来生成唯一值。

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