Oracle关系数据结构
Tables and Table Clusters 表和表簇
Indexes and Index-Organized Tables 索引和索引组织表
Partitions, Views, and Other Schema Objects 分区、视图和其他架构对象
Data Integrity 数据的完整性
Data Dictionary and Dynamic Performance Views 数据字典和动态性能视图
Oracle关系数据结构-Tables and Table Clusters 表和表簇
模式对象简介
数据库模式是数据结构的逻辑容器,称为模式对象。模式对象的示例是表和索引。您可以使用 SQL 创建和操作模式对象。
About Common and Local User Accounts 关于通用用户和本地用户帐户
A database user account has a password and specific database privileges.
一个用户密码和特定数据库权限的数据库用户账号。
**用户账号和模式 User Accounts and Schemas **
每个用户帐户都拥有一个模式,该模式与用户具有相同的名称。模式包含属于该模式的用户的数据。例如,hr用户帐户拥有hr架构,其中包含模式对象,例如employees表。在生产数据库中,模式所有者通常代表数据库应用程序而不是人。
在模式中,每个模式中特定的对象类型都有一个唯一的名称。例如,hr.eployees对应于hr模式中的表employeees。
下图描述了一个名称为hr的模式用户和在模式中的模式对象。
通用和本地用户账号Common and Local User Accounts
入托一个用户账户定义数据库的对象,则此用户账号是通用的。不是oracle提供的用户账号可以是通用账号也可以是本地账号。创建在CDB根目录下面的用户是CDB的通用账号。应用通用账户是创建在应用根目录中的,并且仅仅在该应用容器中是通用的。
下图展示了在一个CDB中可能出现的用户账号。
CDB 通用用户可以连接到CDB 中具有足够权限的任何容器。相比之下,应用程序普通用户只能连接到创建它的应用程序根目录,或者插入到该应用程序根目录的 PDB,具体取决于其权限。
Common User Accounts 通用用户账号
Local User Accounts 本地用户账号
本地用户是数据库中的非通用用户并且只能在单个PDB中执行操作的用户。
本地用户具有以下特点:
本地用户特定于 PDB,并且拥有此PDB中的模式。
本地用户可以管理 PDB,包括打开和关闭它。
具有SYSDBA权限的普通用户可以将权限授予SYSDBA本地用户。在这种情况下,特权用户仍然是本地用户。
一个 PDB 中的本地用户无法登录到另一个 PDB 或 CDB 根。
本地用户的名称不能以字符c##或开头C##。
本地用户的名称只能在其 PDB 中唯一。
Common and Local Objects 公共和局部对象
公共对象在CDB 根或应用程序根中定义,并且可以使用元数据链接或对象链接来引用。局部对象的每一个对象都不是通用对象。
数据库提供的公共对象 CDBROOT中定义并且不能更改。Oracle 数据库不支持在CDBROOT创建通用对象.
您可以将大多数模式对象(例如表、视图、PL/SQL 和 Java 程序单元、序列等)创建为应用程序根中的通用对象。如果对象存在于应用程序根中,则称为应用程序公共对象。
本地用户可以拥有一个公共对象。此外,普通用户可以拥有本地对象,但前提是该对象不是数据链接或元数据链接,并且既不是元数据链接也不是数据链接。
Schema Object Types 架构对象类型
Oracle SQL 使您能够创建和操作许多其他类型的模式对象。
架构对象的主要类型如下表所示。
Object | Description |
---|---|
Table | A table stores data in rows. Tables are the most important schema objects in a relational database. |
Indexes | Indexes are schema objects that contain an entry for each indexed row of the table or table cluster and provide direct, fast access to rows. Oracle Database supports several types of index. An index-organized table is a table in which the data is stored in an index structure. |
Partitions | Partitions are pieces of large tables and indexes. Each partition has its own name and may optionally have its own storage characteristics. |
Views | Views are customized presentations of data in one or more tables or other views. You can think of them as stored queries. Views do not actually contain data. |
Sequences | A sequence is a user-created object that can be shared by multiple users to generate integers. Typically, you use sequences to generate primary key values. |
Dimensions | A dimension defines a parent-child relationship between pairs of column sets, where all the columns of a column set must come from the same table. Dimensions are commonly used to categorize data such as customers, products, and time. |
Synonyms | A synonym is an alias for another schema object. Because a synonym is simply an alias, it requires no storage other than its definition in the data dictionary. |
PL/SQL subprograms and packages | PL/SQL is the Oracle procedural extension of SQL. A PL/SQL subprogram is a named PL/SQL block that can be invoked with a set of parameters. A PL/SQL package groups logically related PL/SQL types, variables, and subprograms. |
其他类型的对象也存储在数据库中,可以使用 SQL 语句创建和操作,但不包含在模式中。这些对象包括数据库用户帐户、角色、上下文和字典对象。
Schema Object Storage模式对象存储
一些模式对象将数据存储在一种称为段的逻辑存储结构中。例如,未分区的堆组织表或索引会创建段。
其他模式对象,例如视图和序列,仅包含元数据。本主题仅描述具有段的架构对象。
Oracle 数据库在表空间中逻辑地存储模式对象。模式和表空间之间没有关系:一个表空间可以包含来自不同模式的对象,而一个模式的对象可以包含在不同的表空间中。每个对象的数据物理上包含在一个或多个数据文件中。
下图显示了表和索引段、表空间和数据文件的可能配置。一个表的数据段跨越两个数据文件,它们都是同一个表空间的一部分。一个段不能跨越多个表空间。
图 段、表空间和数据文件
Schema Object Dependencies 模式对象依赖
一些模式对象引用其他对象,创建模式对象依赖关系。
例如,视图包含引用表或视图的查询,而PL/SQL子程序调用其他子程序。如果对象 A 的定义引用了对象 B,那么 A 是 B 的依赖对象,B 是 A 的被引用对象。
Oracle 数据库提供了一种自动机制来确保从属对象相对于其引用的对象始终是最新的。创建依赖对象时,数据库会跟踪依赖对象与其引用对象之间的依赖关系。当被引用对象以可能影响依赖对象的方式发生变化时,数据库会将依赖对象标记为无效。例如,如果用户删除了一个表,则基于已删除表的任何视图都不可用。
在依赖对象可用之前,必须针对引用对象的新定义重新编译无效的依赖对象。当引用无效的依赖对象时,会自动进行重新编译。
作为模式对象如何创建依赖关系的说明,以下示例脚本创建一个表test_table,然后创建一个查询该表的过程:
CREATE TABLE test_table ( col1 INTEGER, col2 INTEGER );
CREATE OR REPLACE PROCEDURE test_proc
AS
BEGIN
FOR x IN ( SELECT col1, col2 FROM test_table )
LOOP
-- process data
NULL;
END LOOP;
END;
/
复制
以下查询procedure的状态test_proc表明它是有效的:
SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC VALID
复制
将该col3列添加到后test_table,该过程仍然有效,因为该过程不依赖于该列:
SQL> ALTER TABLE test_table ADD col3 NUMBER;
Table altered.
SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC VALID
复制
但是,更改过程所依赖 的col1列的数据类型会使过程无效:test_proc
SQL> ALTER TABLE test_table MODIFY col1 VARCHAR2(20);
Table altered.
SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC INVALID
复制
运行或重新编译该过程使其再次生效,如下例所示:
SQL> EXECUTE test_proc
PL/SQL procedure successfully completed.
SQL> SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'TEST_PROC';
OBJECT_NAME STATUS
----------- -------
TEST_PROC VALID
复制
Sample Schemas示例模式
Oracle 数据库可能包含示例模式,这些模式是一组相互关联的模式
示例:hr
表格概述 Overview of Table
表是 Oracle 数据库中数据组织的基本单位 。
表描述了一个实体,它是关于必须记录哪些信息的重要事物。例如,员工可以是一个实体。
Oracle 数据库表分为以下基本类别:
关系表:关系表具有简单的列,是最常见的表类型
对象表:这些列对应于对象类型的顶级属性
表簇概述 Overview of Table Clusters
表簇是一组共享公共列并将相关数据存储在相同块中的表 。
当表被聚集在一起时,一个数据块可以包含来自多个表的行。例如,一个块可以同时存储employees和departments表中的行,而不是仅存储单个表中的行。
聚簇键是聚簇表共有的一个或多个列。例如,employees和departments表共享department_id列。您在创建表簇时以及创建添加到表簇的每个表时指定簇键。
集群键值是一组特定行的集群键列的值。包含相同集群键值的所有数据,例如department_id=20,物理存储在一起。每个集群键值在集群和集群索引中只存储一次,无论不同表有多少行包含该值。
打个比方,假设人力资源经理有两个书柜:一个是员工文件夹盒,另一个是部门文件夹盒。用户经常要求特定部门中所有员工的文件夹。为了使检索更容易,经理将所有盒子重新排列在一个书柜中。她按部门 ID 划分方框。因此,部门 20 的所有员工文件夹和部门 20 本身的文件夹都在一个框中;部门 100 的员工文件夹和部门 100 的文件夹在另一个框中,依此类推。
当主要查询(但未修改)表并且表中的记录经常一起查询或连接时,请考虑对表进行聚类。因为表簇将不同表的相关行存储在同一个数据块中,所以正确使用表簇相对于非簇表具有以下优点:
减少聚集表连接的磁盘 I/O。
聚集表连接的访问时间得到改善。
存储相关表和索引数据所需的存储空间更少,因为集群键值不会为每一行重复存储。
通常,集群表不适用于以下情况:
这些表经常更新。
这些表经常需要全表扫描。
这些表需要截断。
其他详见:
https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/tables-and-table-clusters.html#GUID-7A1C37B5-F594-4C8E-A38B-6E37742492A1
属性聚集表概述 Overview of Attribute-Clustered Tables
临时表概述 Overview of Temporary Tables
外部表概述 Overview of External Tables
区块链表概述 Overview of Blockchain Tables
不可变表概述 Overview of Immutable Tables
对象表概述 Overview of Object Tables