数据库 schema与catalog
數(shù)據(jù)庫(kù)schema與catalog簡(jiǎn)介
按照SQL標(biāo)準(zhǔn)的解釋,在SQL環(huán)境下Catalog和Schema都屬于抽象概念,可以把它們理解為一個(gè)容器或者數(shù)據(jù)庫(kù)對(duì)象命名空間中的一個(gè)層次,主要 用來解決命名沖突問題。從概念上說,一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)包含多個(gè)Catalog,每個(gè)Catalog又包含多個(gè)Schema,而每個(gè)Schema又包含多個(gè)數(shù) 據(jù)庫(kù)對(duì)象(表、視圖、字段等),反過來講一個(gè)數(shù)據(jù)庫(kù)對(duì)象必然屬于一個(gè)Schema,而該Schema又必然屬于一個(gè)Catalog,這樣我們就可以得到該 數(shù)據(jù)庫(kù)對(duì)象的完全限定名稱從而解決命名沖突的問題了;例如數(shù)據(jù)庫(kù)對(duì)象表的完全限定名稱就可以表示為:Catalog名稱.Schema名稱.表名稱。這里 還有一點(diǎn)需要注意的是,SQL標(biāo)準(zhǔn)并不要求每個(gè)數(shù)據(jù)庫(kù)對(duì)象的完全限定名稱是唯一的,就象域名一樣,如果喜歡的話,每個(gè)IP地址都可以擁有多個(gè)域名。
從實(shí)現(xiàn)的角度來看,各種數(shù)據(jù)庫(kù)系統(tǒng)對(duì)Catalog和Schema的支持和實(shí)現(xiàn)方式千差萬別,針對(duì)具體問題需要參考具體的產(chǎn)品說明書,比較簡(jiǎn)單而常用的實(shí)現(xiàn)方式是使用數(shù)據(jù)庫(kù)名作為Catalog名,使用用戶名作為Schema名,具體可參見下表:
表1 常用數(shù)據(jù)庫(kù)
|
供應(yīng)商 |
Catalog支持 |
Schema支持 |
|
Oracle |
不支持 |
Oracle User ID |
|
MySQL |
不支持 |
數(shù)據(jù)庫(kù)名 |
|
MS SQL Server |
數(shù)據(jù)庫(kù)名 |
對(duì)象屬主名,2005版開始有變 |
|
DB2 |
指定數(shù)據(jù)庫(kù)對(duì)象時(shí),Catalog部分省略 |
Catalog屬主名 |
|
Sybase |
數(shù)據(jù)庫(kù)名 |
數(shù)據(jù)庫(kù)屬主名 |
|
Informix |
不支持 |
不需要 |
|
PointBase |
不支持 |
數(shù)據(jù)庫(kù)名 |
最后一點(diǎn)需要注意的是Schema這個(gè)單詞,它在SQL環(huán)境下的含義與其在數(shù)據(jù)建模領(lǐng)域中的含義是完全不同的。在SQL環(huán)境下,Schema是一組相關(guān)的 數(shù)據(jù)庫(kù)對(duì)象的集合,Schema的名字為該組對(duì)象定義了一個(gè)命名空間,而在數(shù)據(jù)建模領(lǐng)域,Schema(模式)表示的是用形式語言描述的數(shù)據(jù)庫(kù)的結(jié)構(gòu);簡(jiǎn) 單來說,可以這樣理解,數(shù)據(jù)建模所講的Schema<也就是元數(shù)據(jù)>保存在SQL環(huán)境下相應(yīng)Catalog中一個(gè)Schema<名叫 DEFINITION_SCHEMA>下的表中,同時(shí)可以通過查詢?cè)揅atalog中的另一個(gè)Schema<名叫 INFORMATION_SCHEMA>下的視圖而獲取,具體細(xì)節(jié)不再贅述。
SQL Server 數(shù)據(jù)庫(kù) schema 一詞的不同含義
|
我相信一些人在進(jìn)入精彩的SQL Server世界時(shí),有一些數(shù)據(jù)庫(kù)的專業(yè)術(shù)語可能會(huì)導(dǎo)致一些概念的混淆。一個(gè)例子就是"schema"這個(gè)詞的變化。 一般來說,schema 是指數(shù)據(jù)庫(kù)表的組織和定義,它們同其它表的關(guān)系以及它們所包含的列。通俗點(diǎn)說,它就是數(shù)據(jù)庫(kù)的設(shè)計(jì)。 簡(jiǎn)單來說,就是一個(gè)用戶擁有的數(shù)據(jù)庫(kù)的對(duì)象,比如用戶Ender建立了的表,視圖,存儲(chǔ)過程等數(shù)據(jù)庫(kù)對(duì)象,那就構(gòu)成了schema ender。 在SQL Server 2000中,schema 是指數(shù)據(jù)庫(kù)中的對(duì)象的擁有關(guān)系(表、視圖、存儲(chǔ)過程等),它稍微區(qū)別于定義一詞。對(duì)數(shù)據(jù)庫(kù)對(duì)象的擁有關(guān)系是非常重要的,因?yàn)閷?duì)象擁有者是被嚴(yán)格賦予權(quán)限 的。如果擁有關(guān)系在對(duì)象創(chuàng)建的過程中,沒有被定義,那么對(duì)象的默認(rèn)擁有者就是數(shù)據(jù)庫(kù)的擁有者。在schema中叫"dbo"。 在SQL Server 2000中,大部分情況下用戶和架構(gòu)的擁有關(guān)系是一樣的。而在 SQL Server 2005, 數(shù)據(jù)庫(kù)對(duì)象架構(gòu)被賦予了一個(gè)新的定義,叫“schema”。在這種情況下, schema 就是服務(wù)于邏輯對(duì)象組的物理數(shù)據(jù)庫(kù)對(duì)象。對(duì) .NET開發(fā)者來說,它和命名空間的概念非常像。而擁有關(guān)系則被從最重要的概念中分離出來,變得更有彈性和可伸縮性。 Database object schemas are a great addition to SQL Server and in many ways is more consistent with the original definition of a schema than it's SQL Server 2000 counterpart.數(shù)據(jù)庫(kù)對(duì)象架構(gòu)已經(jīng)成為SQL Server 的非常重要的一部分,很多情況下,它相比于SQL Server 2000中的概念來說,與初始的架構(gòu)定義顯得更一致。 |
schema是對(duì)一個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)描述。在一個(gè)關(guān)系型數(shù)據(jù)庫(kù)里面,schema定義了表、每個(gè)表的字段,還有表和字段之間的關(guān)系。
catalog是由一個(gè)數(shù)據(jù)庫(kù)實(shí)例的元數(shù)據(jù)組成的,包括基本表,同義詞,索引,用戶等等,相當(dāng)于數(shù)據(jù)庫(kù)的索引。
在一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)應(yīng)用的數(shù)據(jù)表,這些不同應(yīng)用的表可以放在不同的schema之中,同時(shí),每一個(gè)schema對(duì)應(yīng)一個(gè)用戶,不同的應(yīng)用可以以不同的用戶連接數(shù)據(jù)庫(kù),這樣,一個(gè)大數(shù)據(jù)庫(kù)就可以根據(jù)應(yīng)用把其表分開來管理。
不同的schema之間它們沒有直接的關(guān)系,不同的shcema之間的表可以同名,也可以互相引用(但必須有權(quán)限),在沒有操作別的schema的操作根權(quán)下,每個(gè)用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數(shù)據(jù)(即schema用戶自己的數(shù)據(jù))。
catalog,數(shù)據(jù)庫(kù)名,schema,表名,
服務(wù)器的本地名稱.數(shù)據(jù)庫(kù)名.dbo.表名
DBO是每個(gè)數(shù)據(jù)庫(kù)的默認(rèn)用戶,具有所有者權(quán)限,即DbOwner
通過用DBO作為所有者來定義對(duì)象,能夠使數(shù)據(jù)庫(kù)中的任何用戶引用而不必提供所有者名稱。
比如:你以User1登錄進(jìn)去并建表Table,而未指定DBO,
當(dāng)用戶User2登進(jìn)去想訪問Table時(shí)就得知道這個(gè)Table是你User1建立的,要寫上User1.Table,如果他不知道是你建的,則訪問會(huì)有問題。
如果你建表時(shí)把所有者指給了Dbo,則別的用戶進(jìn)來時(shí)寫上Dbo.Table就行了,不必知道User1。
不光表是如此,視圖等等數(shù)據(jù)庫(kù)對(duì)象建立時(shí)也要如此才算是好。
建表、存儲(chǔ)過程、視圖等數(shù)據(jù)庫(kù)對(duì)象時(shí),其對(duì)應(yīng)的所有者是創(chuàng)建它的用戶。則除了該用戶其他登錄用戶要引用這些東東時(shí),都要加上前綴,很是麻煩。而且,程序因此易出錯(cuò),你查來查去問題確出在這,浪費(fèi)你時(shí)間。
schema: 指的是說當(dāng)用戶create database ****時(shí),****就是一個(gè)schema
catalog:指的是所有的database目錄,將MySQL原來的(mysql,infomation_schema)及后來create database ****創(chuàng)建的的database的集合。
schema:
在一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)應(yīng)用的數(shù)據(jù)表,這些不同應(yīng)用的表可以放在不同的schema之中,同時(shí),每一個(gè)schema對(duì)應(yīng)一個(gè)用戶,不同的應(yīng)用可以以不同的用戶連接數(shù)據(jù)庫(kù),這樣,一個(gè)大數(shù)據(jù)庫(kù)就可以根據(jù)應(yīng)用把其表分開來管理。
不同的schema之間它們沒有直接的關(guān)系,不同的shcema之間的表可以同名,也可以互相引用(但必須有權(quán)限),在沒有操作別的schema的操作根權(quán)下,每個(gè)用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數(shù)據(jù)(即schema用戶自己的數(shù)據(jù)。
catalog: 指的是所有的database目錄
兩者關(guān)系:
從概念上說,一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)包含多個(gè) Catalog,每個(gè)Catalog又包含多個(gè)Schema,而每個(gè)Schema又包含多個(gè)數(shù)據(jù)庫(kù)對(duì)象(表、視圖、字段等),反過來講一個(gè)數(shù)據(jù)庫(kù)對(duì)象必然屬于一個(gè)Schema,而該Schema又必然屬于一個(gè)Catalog,這樣我們就可以得到該數(shù)據(jù)庫(kù)對(duì)象的完全限定名稱從而解決命名沖突的問題了;例如數(shù)據(jù)庫(kù)對(duì)象表的完全限定名稱就可以表示為:Catalog名稱.Schema名稱.表名稱。這里還有一點(diǎn)需要注意的是,SQL標(biāo)準(zhǔn)并不要求每個(gè)數(shù)據(jù)庫(kù)對(duì)象的完全限定名稱是唯一的,就象域名一樣,如果喜歡的話,每個(gè)IP地址都可以擁有多個(gè)域名
在Oracle中,一個(gè)用戶就是一個(gè)Schema,表都是建立在Schema中的,也可以理解為每個(gè)用戶擁有不同的表。一個(gè)用戶想訪問另外一個(gè)用戶,也就是另外一個(gè)schema的表的時(shí)候,可以用 username.tablename的形式來訪問,完全不需要分布式事務(wù)。
當(dāng)你在 SQL Server 里面, 使用 create database 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)以后。
你可以不必額外的去創(chuàng)建 schema,因?yàn)?SQL Server 會(huì) 自動(dòng)的創(chuàng)建一個(gè) 名字叫 dbo 的 schema
SQL/MX Catalogs
An SQL/MX catalog is a named logical object that contains descriptions of a set of
schemas. You can access SQL/MX objects with the three-part name of the actual
object.
A catalog is owned by the user ID that created it, though catalog ownership does not
imply authorization over schemas or objects in that catalog, and any user can drop an
empty catalog, regardless who the catalog owner is. Each of the schemas described in
a catalog has an owner. A catalog can contain multiple schemas, each possibly owned
by a different user. A catalog cannot contain other catalogs. Any user on a node can
create a catalog on that node. The catalog’s owner has the authority to register and
unregister the catalog.
SQL/MP Catalogs
An SQL/MP catalog is a set of tables and indexes that describe SQL objects. Tables in
the set are called catalog tables and NonStop SQL/MP creates them, along with their
indexes, when you execute a CREATE CATALOG statement. Each catalog resides on
its own Guardian subvolume, and the name of that subvolume is also the name of the
catalog.
A catalog name has the form: [
ode .][$ volume .] subvol
Each node on which NonStop SQL/MP is used has one special catalog called the
system catalog and might have many other catalogs. Each table, view, index, partition,
collation, or catalog table located on a node must be described in a catalog on the
same node. For more information.
來自為知筆記(Wiz)
總結(jié)
以上是生活随笔為你收集整理的数据库 schema与catalog的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言深度剖析书籍学习记录 第三章 预处
- 下一篇: STL源码剖析 序列式容器 deque双