每個概念的產生都是為了解決特定問題。我們從零開始:
資料表、檢視、預存程序、觸發器等都是資料庫物件。類比網站的網頁、圖片、腳本檔案。
正如網站用資料夾分類管理檔案,架構是資料庫物件的命名空間容器。一個物件只能屬於一個架構,架構不可巢狀。完整引用格式為 架構名.物件名。
若只寫 SELECT * FROM tablename,SQL Server 會自動加上目前登入使用者的 DEFAULT_SCHEMA。若物件不在該架構下會報「無效的物件名稱」。

加上架構前綴即可解決:
-- 變更使用者預設架構
ALTER USER dbo WITH DEFAULT_SCHEMA = emdbuser;
-- 將物件從 emdbuser 移至 dbo
ALTER SCHEMA dbo TRANSFER emdbuser.Borrower;
實務上不建議永久變更架構或預設值,而是使用 內容切換 暫時以其他使用者身分操作:
EXECUTE AS USER = 'emdbuser';
-- 執行操作
REVERT; -- 切回原身分
這在 .NET 中對應 Impersonate 機制。
SELECT o.name AS object_name, s.name AS schema_name
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE o.type = 'U';
架構是物件的「杯子」,用戶是「喝水的人」。下一節將探討:一個用戶能用多個杯子嗎?一個杯子能給多人用嗎?請見第二節。