在用户看来,数据库中的数据是以表、视图等方式存储的。而oracle则是通过方案的概念来组织和维护表、视图、索引等数据库对象的。

        方案是一系列逻辑数据结构或对象的集合,一个方案只能被一个数据库用户拥有。在创建一个用户的时候,系统会默认创建一个和用户名相同的“方案”,用户创建的表和视图等会保存在自己的方案中。oracle中的方案是对数据库的局部逻辑描述。

        有这样一种情况:数据库用户A和数据库用户B都想在数据库中创建一个名为TRAFFIC的表,oracle允许这种情况发生(mysql则不允许),因为用户A和B都分别拥有自己的方案,数据库中的对象名只需要在同一个方案中唯一,不同方案中可以有相同的数据库对象名。两个TRAFFIC表需要使用“点表示法”来进行区分,它们完整的名称分别是A.TRAFFIC和B.TRAFFIC,其中表名前面的A和B分别表示该表所在的方案名。如果数据库用户A要读取B创建的TRAFFIC表,必须使用B.TRAFFIC,如果用户A要使用自己创建的TRAFFIC表,则可以直接使用表名TRAFFIC访问。换句话说,当一个用户访问某一个数据库对象时,如果在对象名前省略了方案名,那么系统将去该用户自己的方案下查找要访问的数据库对象。

        一个“方案”中的对象是oracle数据库所有对象的子集。根据用户的不同需求,可以将整个oracle数据库按照不同的方案划分成不同部分(类似于在mysql中,根据不同需求建立多个数据库)。

        方案对象是一种逻辑数据存储结构,oracle将方案对象逻辑上存储在某个表空间中,但一个表空间可能包含多个数据文件(后缀名为DBF),因此同一个方案对象在物理上可能被存储在同一个表空间的多个数据文件中。

        方案对象(属于某个方案的数据库对象):表、索引、索引表、簇、触发器、PL/SQL包、序列、同义词、视图、存储函数与存储过程、java类与其他java资源。

        非方案对象(属于整个数据库的数据库对象):表空间、用户、角色、回退段、概要文件等。

        附:在navicat Premium中方案称作“模式”。