Oracle模式表名称限制

时间:2010-07-01 13:00:04

标签: sql oracle database-design

我正在考虑在Oracle上使用JBoss 5.1.0GA,并看到this,警告我应该明确说明应该在其中创建TIMERS表的模式的名称,因为Oracle不允许两个相同的表名,即使是跨模式也是如此。

阅读本文之后,我在StackOverflow上看到了this question,并希望对Oracle中对象的层次结构做一些澄清。

假设我们有一个Oracle数据库服务器。在此,我们创建了两个数据库 - D1和D2。在每个数据库中,我们创建两个模式 - S1和S2。在每个数据库的每个模式中,我们创建一个表 - T1到T4:

+-D1
| +---S1
| |   +---T1
| +---S2
|     +---T2
+-D2
  +---S1
  |   +---T3
  +---S2
      +---T4

我认为如果我在D1 / S2中添加另一个名为T1的表是正确的,那么它将不起作用,因为表名在模式中必须是唯一的,并且T1已经存在于D1 / S1中,但如果我添加T1到D2 / S1或D2 / S2会没问题,因为名为T1的两个表位于不同的数据库中?

我有一种讨厌的感觉,我对Oracle模式的理解是有缺陷的(它不是我以前用过的数据库)所以如果我问的是愚蠢的问题,我很抱歉。

提前致谢

2 个答案:

答案 0 :(得分:4)

Oracle中不存在数据库层次结构级别:实例(进程集)最多只能安装一个数据库(文件集)。在数据库中,您将找到与Oracle中的用户相同的模式。

每个模式都有一个独立的命名空间,例如模式S1S2都可以在同一个数据库中有一个名为T1的表。您可以使用其所有者作为前缀S1.T1S2.T1来专门访问这些表。

某些对象没有所有者(或者其所有者是PUBLIC):例如,公共同义词和目录。这些对象的名称显然必须在数据库中是唯一的。明智地使用公共同义词(在我看来很谨慎)以避免名称冲突。

答案 1 :(得分:1)

就Oracle而言,您可以在两个不同的模式中使用相同的表名。可能有一些特定于您正在阅读的JBoss用法,但它不是Oracle的限制。