數據庫中Schema(模式)概念的理解

在學習數據庫時,會遇到一個讓人迷糊的Schema的概念。實際上,schema就是數據庫對象的集合,這個集合包含了各類對象如:表、視圖、存儲過程、索引等。sql

若是把database看做是一個倉庫,倉庫不少房間(schema),一個schema表明一個房間,table能夠看做是每一個房間中的儲物櫃,user是每一個schema的主人,有操做數據庫中每一個房間的權利,就是說每一個數據庫映射的user有每一個schema(房間)的鑰匙。數據庫

默認狀況下一個用戶對應一個集合,用戶的schema名等於用戶名,並做爲該用戶缺省schema。因此schema集合看上去像用戶名。訪問一個表時,若是沒有指明該表屬於哪一個schema,系統會自動加上缺省的schema。一個對象的完整名稱爲schema.object,而不屬user.object。ide

在MySQL中建立一個Schema和建立一個Database的效果好像是同樣的,可是在SQL Server和Oracle數據庫中效果又是不一樣的。sqlserver

在SQL Server中,user和schema總有一層隱含的關係,讓咱們不多意識到其實user和schema是兩種徹底不一樣的概念,假如咱們在某一數據庫中建立了用戶Bosco,那麼此時後臺也爲咱們默認的建立了schema【Bosco】,schema的名字和user的名字相同。學習

在SQL Server 2005中,爲了向後兼容,當用sp_adduser存儲過程建立一個用戶的時候,sqlserver2005同時也建立了一個和用戶名相同的schema,然而這個存儲過程是爲了向後兼容才保留的,當咱們用create user建立數據庫用戶時,咱們能夠用該用戶指定一個已經存在的schema做爲默認的schema,若是咱們不指定,則該用戶所默認的schema即爲dbo schema,dbo房間(schema)比如一個大的公共房間,在當前登陸用戶沒有默認schema的前提下,若是你在大倉庫中進行一些操做,好比create table,若是沒有制定特定的房間(schema),那麼你的物品就只好放進公共的dbo房間(schema)了。可是若是當前登陸用戶有默認的schema,那麼所作的一切操做都是在默認的schema上進行。spa

在Oracle數據庫中不能新建一個schema,要想建立一個schema,只能經過建立一個用戶的方法解決,在建立一個用戶的同時爲這個用戶建立一個與用戶名同名的schem並做爲該用戶的缺省shcema。即schema的個數同user的個數相同,並且schema名字同user名字一一 對應而且相同。orm

update:2017-3-27server

PostgreSQL中模式的概念與MySQL中Database的概念是等同的。在MYSQL中能夠同事訪問多個Database對象,但在PostgreSQL中只能訪問一個Database對象,但在PostgreSQL中能夠訪問多個Scheme。對象

相關文章
相關標籤/搜索