2

注意事项:

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

  • 此外,这与身份(SQL Server)/序列(Oracle)及其优缺点无关。多亏了这个这个这个,我确实对此有了一些了解

    问题:

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

    根据我对 Oracle 的了解,我发现 Oracle 中最接近的等价物是 SEQUENCES,它可以用来模拟类似于 SQL Server 中的身份的东西。

    由于我是 Oracle 新手,并且我的数据库有 100 多个表,因此我主要关心的是:-

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

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

  • 4

    2 回答 2

    2

    考虑到我必须为 Oracle 中的每个表创建一个序列(几乎),这将是模拟身份的标准接受实现,还是有更好/更简单的方法来在 Oracle 中实现这种实现?

    是的,在 Oracle 中为每个表创建一个序列是非常典型的。可以对多个表使用相同的序列,但是通过对许多/所有表使用单个序列来冒使其成为瓶颈的风险:请参阅此 AskTom q/a

    是否有任何特定的 GOTCHA 与 Oracle 中有这么多序列有关?

    没有我能想到的。

    于 2010-09-24T10:49:04.867 回答
    2

    100多张桌子不是很多。我经常处理具有数百个序列的数据库,每个表一个序列。多多益善。

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

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

    A good article, followed by comments with pros and cons for both approaches: http://rwijk.blogspot.com/2009/12/sysguid.html

    于 2010-09-25T00:08:15.310 回答