用户:这里的用户并不是指数据库的操作人员,而是数据库中定义的一个名称,更准确地说它是账户,只是习惯上称其为用户。也可以说用户是用来连接数据库和访问数据库对象的。
模式:在oracle中,为了便于管理用户所创建的**数据库对象**,引入了模式的概念。模式是一个数据库对象的集合。**模式为一个数据库用户所有**,并且具有与该用户相同的名称。
模式对象:由用户创建的逻辑结构,用以存储或引用数据。其实就是指数据库对象,细分的话,就是分为段和非段数据库对象。
- 段:是由一个或多个数据区构成,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象。
- 非段:通常包括约束、视图、同义词、过程以及程序包等。
用户(user)与模式(schema)的区别:用户是连接数据库对象,而模式是管理数据库对象的。(模式跟用户在oracle 是一对一的关系。)
在数据库中不能创建schema,如果想创建schema,只能通过创建一个用户,在创建一个用户的同时为这个用户也创建了一个与用户同名的schema。用户与模式是一一对应的关系。
比如,有个很常见的需求:我们使用test用户登录了数据库,但是test用户属于表空间A,想访问同一数据库下表空间B内的表,比如表空间B的hr用户下的emp表,就会写成下面这样:
select * from hr.emp
就是在表的前面加上前缀hr。这个前缀严格意义上不是指用户hr,而是模式hr,而emp表就是模式hr下的一个数据库对象。
注意:实际上,我以前经常是理解成hr表空间内emp表。经常把用户hr登录后的表空间成为hr表空间。这样理解是不正确的,因为表空间实际上是数据库的逻辑结构,而物理含义是指oracle中一个数据文件。一个数据库中可以有多个表空间,一个表空间内可以有多个用户。