SQL Server 架構

首先,我們來看一下微軟對架構的官方定義:

架構(Schema)是形成單個命名空間的數據庫實體的集合。命名空間是一個集合,其中每個元素的名稱都是唯一的。在這里,我們可以將架構看成一個存放數據庫中對象的一個容器。

顯然這與Oracle中的用戶(Schema)含義有著很大的不同。


架構實際上在SQL Server 2000中就已經存在,在SQL Server 2000中數據庫用戶和架構是隱式連接在一起的, 每個數據庫用戶都是與該用戶同名的架構的所有者。當我們使用查詢分析器去查詢一個表的時候,一個完整的表的名稱應該包括服務器名.數據庫名.用戶名.對象名,而在SQL SERVER 2005/2008中一個表的完全限定名稱應該為服務器名.數據庫名.架構名.對象名。即,SQL SERVER 2000中的完全限定名稱中的“用戶名”也是數據庫中的用戶,也是“架構名”。但在2008中已經將用戶和其創建對象所屬關聯取消了,而加入了一個全新的架構體系。

用戶架構分離的好處

  • 1 架構管理與用戶管理分開。多個用戶可以通過角色(Role)或組(Windows Groups)成員關系擁有同一個架構。在SQL SERVER 2005/2008 中,每個數據庫中的固定數據庫角色都有一個屬于自己的架構,如果我們創建一個表,給它指定的架構名稱為 db_ddladmin,那么任何一個屬于db_ddladmin中的用戶都是可以去查詢、修改和刪除屬于這個架構中的表,但是不屬于這個組的用戶是沒有對這個架構中的表進行操作的權限。
  • 2 在創建數據庫用戶時,可以指定該用戶賬號所屬的默認架構,若不指定默認架構,則為dbo。大多數用戶在創建對象的時候習慣直接輸入對象名而將對象的架構名稱省略,在2005/2008 中,用戶如果沒有設置自己的默認架構,會給這樣創建的對象加上一個缺省的架構dbo,也就是說,如果一個db_ddladmin的成員在數據庫中創建一個沒有加上架構名稱的表,這個表在數據庫中的完整名稱應該是dbo.表名,創建者在數據庫中如果不是屬于其它特殊組的成員,是不能對自己創建的表進行任何修改和查詢的,那就相當于把自己賺的錢存進了別人的銀行卡,自己卻取不出來。
  • 3 刪除數據庫用戶變得極為簡單。在 SQL Server 2000 中,用戶(User)和架構是隱含關聯的,即每個用戶擁有與其同名的架構。因此要刪除一個用戶,必須先刪除或修改這個用戶所擁有的所有數據庫對象。SQL SERVER 2005/2008將架構和對象者分離后就不在存在這樣的問題,刪除用戶的時候不需要重命名該用戶架構所包含的對象,在刪除創建架構所含對象的用戶后,不再需要修改和測試顯式引用這些對象的應用程序。
  • 4 區分不同業務處理需要的對象,例如,我們可以把公共的表設置成Pub的架構,把銷售相關的設置為Sales,這樣管理和訪問起來更容易。
  • 5 在架構和架構所包含的對象上設置權限(Permissions)比以前的版本擁有更高的可管理性。
  • 6 當查找對象時,先找與用戶默認架構相同的架構下的對象,找不到再找dbo的對象。

小D筆記
schema
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容