① 資料庫中的SCHEMA如何理解
schema是模式的意思。一個schema就相當於一套表、試圖。
② 資料庫中Schema和Database有什麼區別
首先我來做一個比喻,什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User?我們可以可以把
Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個
Schema中的床,Table(床)就被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了J。,然後床上可以放置很多物品,就好比
Table上可以放置很多列和行一樣,資料庫中存儲數據的基本單元是Table,現實中每個倉庫放置物品的基本單位就是床,
User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),其實User是對應與資料庫的(即User是每個對應
資料庫的主人),既然有操作資料庫(倉庫)的權利,就肯定有操作資料庫中每個Schema(房間)的權利,就是說每個資料庫映射的User有每個
Schema(房間)的鑰匙,換句話說,如果他是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是他的(包括房間),他有完全的操作權,可以
扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,呵呵,和現實也太相似了吧。我還可以給User分配具體的許可權,也就是他到某一個房間
能做些什麼,是只能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了,至於分配權
③ 資料庫schema
在 sql Server 2000 和早期版本中,資料庫可以包含一個名為「架構(schema)」的實體,但此實體實際上是資料庫用戶。
在 SQL Server 2005 和 SQL Server 2008 中,架構是指包含表、視圖、過程等的容器。它位於資料庫內部,而資料庫位於伺服器內部。這些實體就像嵌套框放置在一起。伺服器是最外面的框,而架構是最裡面的框。
在 SQL Server 2005 和 SQL Server 2008 中,提倡"用戶和架構分離",即一個用戶可以對應多個架構,一個架構也可以對應多個用戶,所以架構和user就不再需要同名了.系統可以賦予某個user訪問某個架構的許可權,也可以取消該許可權.
④ 在資料庫中,schema,catalog分別指的是什麼
資料庫 Catalog Schema 概念解讀
按照SQL標準的解釋,在SQL環境下Catalog和Schema都屬於抽象概念,可以把它們理解為一個容器或者資料庫對象命名空間中的一個層次,主要用來解決命名沖突問題。從概念上說,一個資料庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個資料庫對象(表、視圖、欄位等),反過來講一個資料庫對象必然屬於一個Schema,而該Schema又必然屬於一個Catalog,這樣我們就可以得到該資料庫對象的完全限定名稱從而解決命名沖突的問題了;例如資料庫對象表的完全限定名稱就可以表示為:Catalog名稱.Schema名稱.表名稱。
詳細信息如下:
In Oracle:
server instance == database == catalog: all data managed by same execution engine
schema: namespace within database, identical to user account
user == schema owner == named account: identical to schema, who can connect to database, who owns the schema and use objects possibly in other schemas
to identify any object in running server, you need (schema name + object name)
In PostgreSQL:
server instance == db cluster: all data managed by same execution engine
database == catalog: single database within db cluster, isolated from other databases in same db cluster
schema :namespace within database.It allows many users to use one database without interfering with each other.
user == named account: who can connect to database, own and use objects in each allowed database separately
to identify any object in running server, you need (database name + schema name + object name)
In MySQL:
server instance == not identified with catalog, just a set of databases
database == schema == catalog: a namespace within the server.
user == named account: who can connect to server and use (but can not own - no concept of ownership) objects in one or more databases
to identify any object in running server, you need (database name
⑤ 資料庫中Schema和Database有什麼區別
在MySQL中創建一個Schema好像就跟創建一個Database是一樣的效果,在SQL Server和Orcal資料庫中好像又不一樣. 目前我只能理解,在mysql中 schema<==>database。
資料庫中User和Schema的關系
假如我們想了解資料庫中的User和Schema究竟是什麼關系,首先必須了解一下資料庫中User和Schema到底是什麼概念。
在SQL Server2000中,由於架構的原因,User和Schema總有一層隱含的關系,讓我們很少意識到其實User和Schema是兩種完全不同的概念,不過在SQL Server2005中這種架構被打破了,User和Schema也被分開了。
首先我來做一個比喻,什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User?我們可以可以把
Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個
Schema中的床,Table(床)就被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了J。,然後床上可以放置很多物品,就好比
Table上可以放置很多列和行一樣,資料庫中存儲數據的基本單元是Table,現實中每個倉庫放置物品的基本單位就是床,
User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),其實User是對應與資料庫的(即User是每個對應
資料庫的主人),既然有操作資料庫(倉庫)的權利,就肯定有操作資料庫中每個Schema(房間)的權利,就是說每個資料庫映射的User有每個
Schema(房間)的鑰匙,換句話說,如果他是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是他的(包括房間),他有完全的操作權,可以
扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,呵呵,和現實也太相似了吧。我還可以給User分配具體的許可權,也就是他到某一個房間
能做些什麼,是只能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了,至於分配權
限的問題,我留在以後單獨的blog中詳述。比喻到這里,相信大家都清楚了吧。
在SQL Server2000中,假如我們在某一個資料庫中創建了用戶Bosco,按么此時後台也為我們默認地創建了默認Schema 【Bosco】。Schema的名字和User的名字相同,這也是我們分不清楚用戶和Schema的原因。
在SQL Server2005中,為了向後兼容,當你用sp_adser 存儲過程創建一個用戶的時候,SQL
Server2005同時也創建了一個和用戶名相同的Schema,然而這個存儲過程是為了向後兼容才保留的,我們應該逐漸熟悉用新的DDL語言
Create User和Create Schema來操作資料庫。在SQL Server2005中,當我們用Create
User創建資料庫用戶時,我們可以為該用戶指定一個已經存在的Schema作為默認Schema,如果我們不指定,則該用戶所默認的Schema即為
dbo Schema,dbo
房間(Schema)好比一個大的公共房間,在當前登錄用戶沒有默認Schema的前提下,如果你在大倉庫中進行一些操作,比如Create
Tabe,如果沒有指定特定的房間(Schema),那麼你的物品就只好放進公共的dbo房間(Schema)了。但是如果當前登錄用戶有默認的
Schema,那麼所做的一切操作都是在默認Schema上進行(比如當前登錄用戶為login1,該用戶的默認Schema為login1,那麼所做的
所有操作都是在這個login1默認Schema上進行的。實驗已經證明的確如此)。估計此時你會有一點暈,為什麼呢?我剛才說dbo是一個
Schema,但是你可以在資料庫中查看到,dbo同時也是一個user,暈了吧,呵呵。
在SQL Server2005中創建一個資料庫的時候,會有一些Schema包括進去,被包括進去的Schema有:dbo,INFORMATION_SCHEMA, guest,sys等等(還有一些角色Schema,不提了,有暈了)。
我在上文中已經提到了,在SQL Server2005中當用存儲過程sp_adser創建一個user時,同時SQL
Server2005也為我們創建了一個默認的和用戶名相同的Schema,這個時候問題出來了,當我們create table
A時,如果沒有特定的Schema做前綴,這個A表創建在了哪個Schema上,即進入了哪個房間?答案是:
1.如果當前操作資料庫的用戶(可以用Select current_user查出來)有默認的Schema(在創建用戶的時候指定了),那麼表A被創建在了默認的Schema上。
2.如果當前操作資料庫的用戶沒有默認的Schema(即在創建User的時候默認為空),但是有一個和用戶名同名的Schema,那麼表A照樣被創建
在了dbo
Schema上,即使有一個和用戶名同名的Schema存在,由於它不是該用戶默認的Schema,所以創建表的時候是不會考慮的,當作一般的
Schema來處理,別看名字相同,可是沒有任何關系哦。
3.如果在創建表A的時候指定了特定的Schema做前綴,則表A被創建在了指定的 Schema上(有許可權嗎?)
現在問題又出來了,在當前操作資料庫的用戶(用select
current_user可以查看到,再次強調)沒有默認Schema的前提下,當我們用Create table A語句時,A表會去尋找dbo
Schema,並試圖創建在dbo Schema上,但是如果創建A表的用戶只有對dbo
Schema的只讀許可權,而沒有寫的許可權呢?這個時候A表既不是建立不成功,這個就是我以後會提及到的Login,User,
Role和Schema四者之間的關系。在這里,為了避免混淆和提高操作資料庫的速度(在少量數據范圍內,對我們肉眼來說幾乎看不到差異),我們最好每次
在操作資料庫對象的時候都顯式地指定特定的Schema最為前綴。
現在如果登錄的用戶為Sue,該用戶有一個默認Schema也為Sue,那麼如果現在有一條查詢語句為Select * from mytable, 那麼搜尋每個房間(Schema)的順序是怎樣的呢?順序如下:
1. 首先搜尋sys.mytable (Sys Schema)
2. 然後搜尋Sue.mytable (Default Schema)
3. 最後搜尋 dbo.mytable (Dbo Schema)
執行的順序大家既然清楚了,那麼以後在查詢資料庫表中的數據時,最好指定特定的Schema前綴,這樣子,資料庫就不用去掃描Sys Schema了,當然可以提高查詢的速度了。
另外需要提示一下的是,每個資料庫在創建後,有4個Schema是必須的(刪都刪不掉),這4個Schema為:dbo,guest,sys和INFORMATION_SCHEMA,其餘的Schema都可以刪除。
⑥ mysql資料庫schema是什麼
schema在資料庫中表示的是資料庫對象集合,它包含了各種對像,比如:表,視圖,存儲過程,索引等等。
一般情況下一個用戶對應一個集合,為了區分不同的集合就需要給不同的集合起名字。用戶的schema名就相當於用戶名,並作為該用戶預設schema。
所以說,schema集合看上去像用戶名。例如,當訪問一個數據表時,如果該表沒有指明屬於哪個schema,系統就會自動的加上預設的schema。
(6)資料庫中schema擴展閱讀
Schema的創建在不同的資料庫中要創建的Schema方法是不一樣的,但是它們有一個共同的特點就是都支持CREATE SCHEMA語句。
在MySQL資料庫中,可以通過CREATE SCHEMA語句來創建一個資料庫Oracle Database在Oracle中,由於資料庫用戶已經創建了一個模式,所以,CREATE SCHEMA語句創建的是一個schema,它允許將schema同表和視圖關聯起來,並在這些多個事務中發出多個SQL語句。
SQL Server在SQL Server中,CREATE SCHEMA會按照名稱來創建一個模式,與MySQL不同,CREATE SCHEMA語句創建了一個單獨定義到資料庫的模式。和Oracle資料庫也有不同,它實際上創建了一個模式,而且一旦創建了模式,就可以往模式中添加用戶和對象。
⑦ MYSQL中database和schema一樣嗎
在SQL標准中,Database和Schema是不同的概念,在很多資料庫中,二者也有明顯的不同,但在另外一些資料庫中,二者可能是相同的含義。
通常情況下,Database指的是一個資料庫中的一類對象,用於組織表、視圖、存儲過程、自定義函數等資料庫對象;而Schema除了包含對象外,另外一個重要的特點是有用戶的概念,可以這樣理解Schema:Schema是指定的資料庫用戶和這個用戶所擁有的所有資料庫對象的集合。
⑧ schema到底有什麼用
資料庫中的Schema,為資料庫對象的集合,一個用戶一般對應一個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 proceres synonyms indexes clusters and database links。
一個用戶一般對應一個schema 該用戶的schema名等於用戶名,並作為該用戶預設schema。這也就是在企業管理器的方案下看到schema名都為資料庫用戶名的原因。oracle資料庫中不能新創建一個schema,要想創建一個schema,只能通過創建一個用戶的方法解決(oracle中雖然有create schema語句,但是並不是用來創建一個schema的),在創建一個用戶的同時為這個用戶創建一個與用戶名同名的schema並作為該用戶的預設schema。即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。這就像一個用戶有一個預設的表空間,但是該用戶還可以使用其他的表空間,如果在創建對象時不指定表空間,則對象存儲在預設表空間中,要想讓對象存儲在其他表空間中,需要在創建對象時指定該對象的表空間。
⑨ oracle中schema指的是什麼
Schema,即XML Schema,XSD (XML Schema Definition)是W3C於2001年5月發布的推薦標准,指出如何形式描述XML文檔的元素。XSD是許多XML Schema 語言中的一支。XSD是首先分離於XML本身的schema語言,故獲取W3C的推薦地位。
像所有XML Schema 語言一樣,XSD用來描述一組規則──一個XML文件必須遵守這些規則,才能根據該schema『合法(Valid)』。
(9)資料庫中schema擴展閱讀:
發展歷程
在官方文檔的參考附錄里,XSD標准承認受到[文件類型描述|DTD]]和其他早期XML schema 語言的影響,如DDML、SOX、XML-Data、以及XDR。XSD從中吸收了一些特性,然而也在這些特性中有所折衷。
這些早期schema 語言中的XDR與SOX在XML Schema發布後仍繼續使用了一段時間。不少微軟的產品支持XDR直到2006年十二月MSXML6.0的發布(MSXML 6.0拋棄了XDR改用XSD)。
Commerce One, Inc支持它自己的SOX schema 語言直到該公司於2004年末破產。2004年十二月,Novell, Inc.購買了該公司,包括那些與SOX相關的專利,據報導是盡力防止被某些不相關的、以打專利相關官司為生的公司剝削圖利。
⑩ 請教資料庫中關於schema的理解
在MySQL中創建一個Schema好像就跟創建一個Database是一樣的效果,在SQL
Server和Orcal資料庫中好像又不一樣.
目前我只能理解,在mysql中
schema<==>database。
資料庫中User和Schema的關系
假如我們想了解資料庫中的User和Schema究竟是什麼關系,首先必須了解一下資料庫中User和Schema到底是什麼概念。
在SQL
Server2000中,由於架構的原因,User和Schema總有一層隱含的關系,讓我們很少意識到其實User和Schema是兩種完全不同的概念,不過在SQL
Server2005中這種架構被打破了,User和Schema也被分開了。
首先我來做一個比喻,什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User?我們可以可以把Database看作是一個
大倉庫
,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的床,Table(床)就被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了J。,然後床上可以放置很多物品,就好比Table上可以放置很多列和行一樣,資料庫中存儲數據的基本單元是Table,現實中每個倉庫放置物品的基本單位就是床,
User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),其實User是對應與資料庫的(即User是每個對應資料庫的主人),既然有操作資料庫(倉庫)的權利,就肯定有操作資料庫中每個Schema(房間)的權利,就是說每個資料庫映射的User有每個Schema(房間)的鑰匙,換句話說,如果他是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是他的(包括房間),他有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,呵呵,和現實也太相似了吧。我還可以給User分配具體的許可權,也就是他到某一個房間能做些什麼,是只能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了,至於分配許可權的問題,我留在以後單獨的blog中詳述。比喻到這里,相信大家都清楚了吧。