注意事项:
问题:
我来自 SQL Server 背景,并且一直使用标识列作为大多数表的代理主键。
根据我对 Oracle 的了解,我发现 Oracle 中最接近的等价物是 SEQUENCES,它可以用来模拟类似于 SQL Server 中的身份的东西。
由于我是 Oracle 新手,并且我的数据库有 100 多个表,因此我主要关心的是:-
系统同时支持Oracle 10G和11G
注意事项:
问题:
我来自 SQL Server 背景,并且一直使用标识列作为大多数表的代理主键。
根据我对 Oracle 的了解,我发现 Oracle 中最接近的等价物是 SEQUENCES,它可以用来模拟类似于 SQL Server 中的身份的东西。
由于我是 Oracle 新手,并且我的数据库有 100 多个表,因此我主要关心的是:-
系统同时支持Oracle 10G和11G
考虑到我必须为 Oracle 中的每个表创建一个序列(几乎),这将是模拟身份的标准接受实现,还是有更好/更简单的方法来在 Oracle 中实现这种实现?
是的,在 Oracle 中为每个表创建一个序列是非常典型的。可以对多个表使用相同的序列,但是通过对许多/所有表使用单个序列来冒使其成为瓶颈的风险:请参阅此 AskTom q/a
是否有任何特定的 GOTCHA 与 Oracle 中有这么多序列有关?
没有我能想到的。
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