Oracle schema的理解

我們先來看一下他們的定義:
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.

      從定義中我們可以看出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。這就像一個用戶有一個缺省的表空間,但是該用戶還可以使用其他的表空間,如果我們在創建對象時不指定表空間,則對象存儲在缺省表空間中,要想讓對象存儲在其他表空間中,我們需要在創建對象時指定該對象的表空間。

 

      做一個比喻,什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User?我們可以把Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的牀,Table(牀)被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了。,然後牀上可以放置很多物品,就好比 Table上可以放置很多列和行一樣,數據庫中存儲數據的基本單元是Table,現實中每個倉庫放置物品的基本單位就是牀, User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),user和schema是一一對應的,每個user在沒有特別指定下只能使用自己schema(房間)的東西,如果一個user想使用其他schema(房間)的東西,那就要看那個schema(房間)的user(主人)有沒有給你這個權限了,或者看這個倉庫的老大(DBA)有沒有給你這個權限了。換句話說,如果你是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是你的(包括房間),你有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,你還可以給每個User分配具體的權限,也就是他到某一個房間能做些什麼,是隻能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了。

發佈了117 篇原創文章 · 獲贊 9 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章