oracle命名空间

本文探讨了Oracle数据库中的命名空间概念,解释了不同类型的数据库对象如何共存于同一Schema内而不发生冲突,以及哪些对象类型共享相同的命名空间。

不知道大家在学习的过程中有没有注意到过这样的一个问题,当你创建一个表,名字为TEST。也许过几天当你做索引或者视图实验的时候,想再次创建一个名字为TEST的索引或视图的时候,ORACLE会提示你已经存在该对象。本来我也没太在意,我以为就是以前可能创建过一个同名的对象呗,可做的实验多了我发现好像里面有些蹊跷,比如说我有个表叫TEST,那么当我再创建一个TEST视图的时候就会报错,可我如果再创建的不是视图,而是一个叫做TEST的索引的时候,就不会报错。由此引申出了命名空间的概念,在这之间我一直没在ORACLE中思考过这个概念。于是去网上搜了些相关资料,自己做了下实验,在这里小总结一下~

命名空间定义了一组对象类型,在命名空间里,对象的名字必须是唯一的,当然,在不同的命名空间里,是可以使用相同的的名字的。

 

下面的对象类型共享同一个命名空间:

• Tables

• Views

• Sequences

• Private synonyms

• Stand-alone procedures

• Stand-alone stored functions

• Packages

• Materialized views

• User-defined types

 

 

因此,如果数据库中有一个表叫做TEST,那么就不能再创建一个叫做TEST的视图,至少,在一个schema中是不可能出现这种现象的。

 

下面的对象类型有各自的命名空间:

• Indexes

• Constraints

• Clusters

• Database triggers

• Private database links

• Dimensions

 

 

所以你可以创建一个叫做TEST的索引,即使在相同的schema中。

 

不受Schema局限的对象类型(Non schema objects)有它们自己的命名空间,如下:

• User roles

• Public synonyms

• Public database links

• Tablespaces

• Profiles

• Parameter files (PFILEs) and server parameter files (SPFILEs)

所以两个Non-schema objects可以用相同的名字。 ......

### Oracle 数据库中的命名空间 #### 命名空间概述 在Oracle数据库中,命名空间是指一组对象名称的空间集合。不同类型的数据库对象属于不同的命名空间,这意味着相同的名字可以在多个命名空间中共存而不发生冲突。例如,可以有一个名为`TEST`的表和一个名为`TEST`的索引存在于同一个模式(schema)内[^3]。 #### 对象与命名空间的关系 每种数据库对象都归属于特定的一个或几个命名空间之一。以下是主要的一些命名空间及其所含有的对象类型: - **Schema Objects**: 表、视图、序列(sequence)、过程(procedure)、函数(function),触发器(trigger)等。 - **Non-Schema Objects**: 同义词(synonym),目录(directory),队列(queue)等。 对于schema级别的对象而言,只要它们不属于同一类别,则允许具有相同的名称;而对于non-schema级别对象来说也是如此。然而,在同一个命名空间内的两个对象不能共享同样的名字。 #### 创建对象时考虑命名空间的影响 当创建新的数据库对象时,应当注意当前环境中已存在的其他对象以及其所属的命名空间。比如尝试在一个已有同名表的情况下建立另一个同名视图将会失败,但如果要新建的是不同于之前定义过的另一种类型的实体(如索引而非视图),则不会遇到此限制。 ```sql -- 正确:在同一模式下创建同名但不同类型的对象 CREATE TABLE TEST (id NUMBER); CREATE INDEX TEST ON TEST(id); -- 错误:试图在同一模式下的相同命名空间里创建重复名称的对象 CREATE VIEW TEST AS SELECT * FROM DUAL; ``` #### 实践建议 为了避免潜在的命名冲突并保持良好的实践习惯,推荐遵循以下原则: - 尽量采用有意义且独特的名称来标识各个对象; - 遵循一致性的命名约定,以便于识别和管理; - 在设计阶段充分考虑到未来扩展的可能性,预留足够的灵活性给后续开发工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值