SQL 架構剖析

關鍵字:T-SQL;架構

架構(Schema)。微軟的官方說明(MSDN): "數據庫架構是一個獨立於數據庫用戶的非重複命名空間,您可以將架構視爲對象的容器",詳細參考 http://technet.microsoft.com/zh-cn/library/ms190387.aspx.我們知道,在JAVA中,命名空 間名其實就是文件夾名。因此我們非常明確一點:一個對象只能屬於一個架構,就像一個文件只能存放於一個文件夾中一樣。與文件夾不同的是,架構是不能嵌套 的,如此而已。因此,我們要訪問一個數據庫對象的時候,通常應該是引用它的全名"架構名. 對象名",這點非常類似C#。

問:爲什麼有的時候寫select * from tablename也可以執行呢?

  答:這是因爲default schema.當只寫tablename時,Sql Server會自動加上當前登錄用戶的default schema。

問:如何根據表名獲取一個表的Schema呢?

  答:可以參照以下SQL語句從sys.objects視圖和sys.schemas視圖中獲取。

  Code

   select sys.objects.name,
       sys.schemas.name
   from  sys.objects,
       sys.schemas
   where sys.objects.type='U'
   and  sys.objects.schema_id=sys.schemas.schema_id

 結論:架構就是數據庫對象的容器。數據庫對象是飲料,架構就是杯子, 誰拿杯子喝水呢?當然是用戶,那麼是不是一個用戶只能用一個杯子,一個杯子是不是從一而終,只能給一個人用呢?。

(1)李老闆開了一個小公司,公司有個倉庫,堆放了一些貨物,由於倉庫小,爲了節約成本,這個倉庫根本沒有鎖。只要知道倉庫在哪裏,就可以去取貨。這就是數據庫的第一階段:無權限管理階段。

(2)近倉庫裏的東西老是不翼而飛。李老闆才明白,就算是員工都是自覺的,但是別的人也可以拿走裏面的貨物,怎麼辦呢?老闆一咬牙,花一百塊錢買了一把鎖!並且只給少數幾個人配鑰匙。這下東西被別的公司的人拿走的情況基本杜絕了。對於數據庫來說,相當於把人分成了兩種,一種授權用戶,一種未授權用戶。這時,數據庫就有了用戶的概念,但是它只有一個用戶,就是有鑰匙的人,它只對有鑰匙的人開放。這就是數據庫權限管理的第二階段:上鎖階段或者單用戶管理階段。

(3)好景不長,老闆發現倉庫的東西還是經常少。明明都是有鑰匙的人才能進去呀。但是,誰拿了多少,根本沒辦法查出來。老闆猜測原因有二:一,有些人拿了不該拿 的東西。二,有些人偷偷的去配了鑰匙。老闆一咬牙,沒收所有的鑰匙。花800塊一個月僱個倉庫管理員,每個進倉庫拿東西的人都要登記。李老闆還給給倉庫管 理員一個清單,誰可以拿什麼東西,
 姓名  貨物1  貨物2  貨物3  貨物4  貨物5

  張三      Y           Y           N       N         N

  李四     Y          Y          Y       N        N

   王五    Y          Y          Y       Y         Y

 趙六    N          Y          Y      Y          Y


(4) 話說過了一年,李老闆的生意越做越大,倉庫裏的東西也越來越多,最近張三反應,去倉庫取貨老是要排隊,而且經常要等很久才能取到貨,每次來一個人取貨,保管員都要根據這張清單對一千個貨物,幸虧取貨的人少,如果再多幾個人的話,估計就要在倉庫門口打架了。
 姓名  貨物1   貨物2   貨物3  貨物......   貨物1000

   張三      Y           Y           N       N         N

  李四     Y          Y          Y       N        N

   王五    Y          Y          Y       Y         Y

 趙六    N          Y          Y      Y          Y


過了幾天,老闆把5個貨架採購回來,放進倉庫,然後給管理員一份管理手冊。新的管理手冊如下:

  手冊第一頁:貨架權限清單
姓名  貨架1   貨架2   貨架3   貨架4   貨架5

 張三      Y           Y           N       N         N

  李四     Y          Y          Y       N        N

   王五    Y          Y          Y       Y         Y

 趙六    N          Y          Y      Y          Y


手冊第二頁:1號貨架貨物清單
  貨物1  貨物2   貨物3   貨物4   貨物.......   貨架190


手冊第三頁:2號貨架貨物清單
  貨物191  貨物192   貨物193   貨物194   貨物.......   貨架390


每次貨物入庫的時候,根據貨架貨物清單放到相應的貨架上,然後貼上標籤。出庫的時候哦只要看貨架號碼就可以啦。

  看到這裏,也許有人恍然大悟,這不就是第一節講的“架構Schema”嗎?沒錯,現在我們終於知道,架構概念的引入就是爲了解決數據庫對象太多不好管理的缺點 。到現在爲止,我們的數據庫管理就變成了用戶-架構-數據庫對象的模式 了。

用戶與架構(schema)分開,讓數據庫內各對象不再綁在某個用戶賬號上,可以解決之前版本“用戶離開公司"問題 ,也就是在擁有該對象的用戶離開公司, 或離開該職務時,不必要大費周章地更改該用戶所有的對象屬於新的用戶所有。另外,也可讓 DBA 在安裝某個套裝軟件時,設置該套裝軟件所用的數據庫對象都屬於某個特定的架構,容易區別。也就是說,在單一數據庫內,不同部門或目的的對象,可以通過架構 區分不同的對象命名原則與權限。




對於架構特點的理解小節如下:

1.一個架構中不能包含相同名稱的對象,相同名稱的對象可以在不同的架構中存在。

2.一個架構只能有一個所有者,所有者可以是用戶, 數據庫角色, 應用程序角色。

3.一個用數據庫角色可以可以擁有一個默認架構,和多個架構。

4.多個數據庫用戶可以共享單個默認架構。

5.由於架構與用戶獨立,刪除用戶不會刪除架構中的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章