1、schema vs. tablespace
A schema is a collection of database objects. A schema is owned by a database user and has the same name as that user. Schema objects are the logical structures that directly refer to the database's data. Schema objects include structures like tables, views, and indexes.
Schema objects are logical data storage structures. Schema objects do not have a one-to-one correspondence to physical files on disk that store their information. However, Oracle stores a schema object logically within a tablespace of the database. The data of each object is physically contained in one or more of the tablespace's datafiles. For some objects, such as tables, indexes, and clusters, you can specify how much disk space Oracle allocates for the object within the tablespace's datafiles.
(There is no relationship between a tablespace and a schema. Objects in the same schema can be in different tablespaces, and a tablespace can hold objects from different schemas.)
表空间和schema之间没有任何关系。 同一schema中的对象可以位于不同的表空间中,而表空间可以容纳来自不同schema的对象.
"schema"是特定用户拥有的所有对象的集合。 因此,如果用户SCOTT创建两个表,EMP和DEPT,以及一个视图EMP_RPT和一个过程GET_MY_EMP,这些对象(表,视图,过程)共同组成了SCOTT模式。
这些对象将以物理方式存储在表空间中。
表空间是数据文件的命名集合。 因此,表空间用户将由一个或多个数据文件组成。 一个特定的数据文件可以属于一个且只有一个表空间。 如果一个表空间有多个数据文件,oracle将管理这些文件作为应用程序不可见的集合-就像操作系统或磁盘子系统处理跨多个物理磁盘的条带化一样。
SCOTT架构中的特定对象只能存在于一个表空间中,但并非schema的所有对象都必须位于同一个表空间中。 同样,一个表空间可以包含来自多个schema的对象。
一个用户可以访问其他用户的表吗?
正如其他人所说-FRED可以访问属于SCOTT的表,只要SCOTT已经授权予FRED。
(一)什么Oracle叫用户(user):
A user is a name defined in the database that can connect to and access objects.
Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)。
(二)用户(user)与模式(schema)的区别:
Schemas and users help database administrators manage database security.
用户是用来连接数据库对象。而模式是用来创建管理对象的。模式跟用户在oracle 是一对一的关系。
(不过db2却不同,db2一个用户可以对应多个模式,db2用户是系统,他首先必须获得系统用户才能成为数据库用户,也就是数据库用户就是系统用户,只有模式才是数据库类似用户。有兴趣可以去研究。这里就不跑题了,这也是db2特有的)。
从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看到schema名都为数据库用户名的原因。
Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的)。
在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。
一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。
比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp;
其实,这sql语句的完整写法为select * from scott.emp。
在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
3、oracle 用户与表空间关系
用户=商家
表=商品
表空间=仓库
1. 1个商家能有很多商品,1个商品只能属于一个商家
2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B
3. 仓库不属于任何商家
4. 商家都有一个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中
oracle中用户的所有数据都是存放在表空间中的,很多个用户可以共用一个表空间,也可以指定一个用户只用某一个表空间。
表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间;
用户: 创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象;
表: 是数据记录的集合;
创建过程: 表空间--->用户--->表;
所属关系: 表空间 包含 用户 包含 表。
参考文献:
https://community.oracle.com/thread/1116835
https://www.cnblogs.com/qiuhong10/p/7883156.html
https://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm#i22627
https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm#sthref482