關鍵字: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.由於架構與用戶獨立,刪除用戶不會刪除架構中的對象。