我正在考虑在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模式的理解是有缺陷的(它不是我以前用过的数据库)所以如果我问的是愚蠢的问题,我很抱歉。
提前致谢
富
答案 0 :(得分:4)
Oracle中不存在数据库层次结构级别:实例(进程集)最多只能安装一个数据库(文件集)。在数据库中,您将找到与Oracle中的用户相同的模式。
每个模式都有一个独立的命名空间,例如模式S1
和S2
都可以在同一个数据库中有一个名为T1
的表。您可以使用其所有者作为前缀S1.T1
和S2.T1
来专门访问这些表。
某些对象没有所有者(或者其所有者是PUBLIC):例如,公共同义词和目录。这些对象的名称显然必须在数据库中是唯一的。明智地使用公共同义词(在我看来很谨慎)以避免名称冲突。
答案 1 :(得分:1)
就Oracle而言,您可以在两个不同的模式中使用相同的表名。可能有一些特定于您正在阅读的JBoss用法,但它不是Oracle的限制。