Oracle的Schema对象

Oracle中Schema一系列是数据库对象的集合。一个Schema由同名的数据库数据库用户所有。Schema对象(schema objects)是由用户创建的一些逻辑结构,比如存储物理数据(hold data)的表、索引,或者仅仅包含定义信息的视图、同名词等。
Oracle的Schema术语和表空间之间没有任何关系。在一个Schema中的对象可以存储在不同的表空间中,一个表空间也可以存储不同Schema的数据。

命名schema对象

数据库中任何对象属于一个Schema,并且在这个Schema中名称是唯一的。不同Schema中的对象可以拥有相同的名称。我们可以使用schema名称来明确引用对象。比如,hr.employees引用的是hr schema中名称为employees表。术语“数据库对象”和“schema对象”在使用的时候可以互换。
当创建一个数据库对象的时候,必须确保在对应的schema中创建。正确的做法是以schema所属的用户登录数据库,然后以该用户身份创建对象。一般而言,我们会把属于一个应用的对象放在同一个Schema中。
一个Schema对象必须遵守某些特定的规则,除了在一个Schema中是唯一外,一个Schema对象的名称不能超过30个字节,并且必须以字母开头。
我们可以通过客户端工具输入SQL语句创建Schema对象,比如SQL Developer、SQL Plus。

Schema对象类型

Oracle SQL能够创建和操作许多类型的schema对象,基本的schema对象有:

  • Tables(表)
    表以行的形式存储数据,是关系数据库中最重要的schema对象。
  • Indexes(索引)
    索引是一种包含表或表簇(table cluster)的建立索引后的行的起始地址,能够实现快速、直接获取行数据。Oracle数据库支持多种类型的索引。一个索引方式组织的表(index-organized table)的数据以索引结构进行存储。
  • Partitions(分区)
    分区是大表和大索引的分片。每个分区有自己的名称并且通常有自己的存储特征。
  • Views(视图)
    视图是一个或多个表、视图数据的自定义展示输出。我们可以认为视图是存储后的查询,但不包含实际的数据。
  • Sequences(序列)
    序列是一个由用户创建的、能够被多个用户共享用以生成整数的。典型情况下,我们使用序列来生成主键值。
  • Dimensions(维度)
    维度定义了列集合对中的父子关系,在这里列集合中的所有列必须来自于同一个表。维度通常用来对数据进行分类,比如客户、产品、时间等。
  • Synonyms(同义词)
    同义词是schema对象的别名,因为同义词仅仅是一个别名,所以在数据字典中正需要保存同义词的定义即可,而不需要其他任何内容。
  • PL/SQL subprograms and packages(PL/SQL 子程序和包)
    PL/SQL是SQL的Oracle程序扩展。PL/SQL子程序是一个命名了的、能够通过一系列参数调用的PL/SQL块。PL/SQL包将相关的PL/SQL类型、变量、子程序组合在一起的。

其他类型的对象比如数据库的用户账户、角色、上下文、字典对象也保存在数据库中,也可以通过SQL语句进行创建和管理,但是不包含在Schema中。

Schema对象存储

一些Schema对象是以逻辑存储结构的方式存储数据,这种逻辑存储结构为“段”(segment)。比如一个没有分区的heap-organized表或是一个索引就会创建一个段。

另外一些schema对象,比如视图、序列,仅仅包含元数据信息。下面讨论的schema对象是指以段的形式保存的对象。

逻辑上,Oracle数据库保存schema对象在一个表空间中。schema和表空间没有对应关系:一个表空间可以包含不同schema的对象,一个schema的对象可以分布在不同的表空间中。每个对象的数据在物理上存在于一个或多个数据文件中。

下面的图画出了表、索引段、表空间和数据文件的一个可能关系。一个表的数据段跨了2个数据文件,这两个数据文件同属于相同的表空间。一个数据段不能横跨多个表空间。
在这里插入图片描述

Schema对象依赖性

一些schema对象引用其他对象的时候,就会创建schema对象依赖关系。

比如,一个包含引用表或视图的检索的视图,或是一个PL/SQL子程序激发另外的子程序时,就包含schema对象的依赖。如果一个对象A的定义中引用了对象B,那么A是一个建立在B上的依赖对象,而B是对A而言就是一个引用对象。

Oracle数据库提供了一个包子依赖对象随着引用对象自动更新的自动化机制。当你创建一个依赖对象时,数据库会跟踪依赖对象和它的引用对象之间的联系。当一个引用对象发生变化会影响依赖对象时,数据库会标记依赖对象为无效。比如,一个用户Drop一个表后,基于这个表的视图都是无法使用的。

当引用对象重新定义后,无效的依赖对象必须重新编译才能正常使用。当无效的依赖对象被其他对象引用的时候,重新编译会自动进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值