默認情況下,使用dbo owner/schema設置對象(表,存儲過程等)(我認爲ms sql 2000將其稱爲擁有者,而ms sql 2005將其稱爲模式)模式,MS SQL中對象的所有者
所有者/模式實際上是數據庫中的角色或用戶。我一直保留dbo的默認值,但我最近在Microsoft培訓手冊中看到了一些示例,其中一些表&存儲過程具有不同的所有者/架構。什麼時候這樣做是有益的,爲什麼?
默認情況下,使用dbo owner/schema設置對象(表,存儲過程等)(我認爲ms sql 2000將其稱爲擁有者,而ms sql 2005將其稱爲模式)模式,MS SQL中對象的所有者
所有者/模式實際上是數據庫中的角色或用戶。我一直保留dbo的默認值,但我最近在Microsoft培訓手冊中看到了一些示例,其中一些表&存儲過程具有不同的所有者/架構。什麼時候這樣做是有益的,爲什麼?
當您有安全問題時,模式的使用是非常有益的。
如果您有多個訪問數據庫的應用程序,那麼您可能不希望物流部門訪問人力資源記錄。因此,您將所有人力資源表放入hr模式,並且只允許hr角色的用戶使用它。
六個月後,物流現在需要知道內部費用帳戶,以便他們可以將所有這些藍色筆的調色板發送給正確的位置人員。然後,您可以創建一個存儲過程,該存儲過程以具有查看hr模式以及後勤模式的權限的用戶身份執行。物流用戶永遠不需要知道人力資源部門發生了什麼,但他們仍然可以獲取他們的數據。
您也可以按照cfeduke建議的方式使用模式,並使用它們在對象瀏覽器中對事物進行分組。如果你這樣做,只需要小心,因爲你可能最終創建Person.Address和Company.Address,當你真的只需要一個dbo.Address(我不是敲你的例子,cfeduke,只是用它來說明這兩個地址表可能是相同的,或者它們可能與YMMV不同)。
組織
在開發環境,對象的生產複製是DBO但開發人員可以在自己的模式發展。然後代碼可以非常簡單地引用prod副本或其更改。使用別名可以使這種技術更加簡單。
此外,生產數據庫可能支持衆多系統或子系統。您可以使用不同的模式來保持這些對象分組。
在SQL 2000中,等效於數據庫用戶的模式,在SQL 2005中,每個模式都是獨立於創建數據庫用戶的數據庫用戶而存在的獨特名稱空間。
當我需要製作將在其他項目中使用的功能或模塊時,我使用模式,因此我將能夠隔離模塊使用的數據庫對象。
我在過去的類命名空間中使用了模式,因此您可以有多個名爲Address的實體([Person].[Address]
,[Company].[Address]
)。這樣做的好處是SQL Management Studio中的可視化組織,通過將所有內容放在一個模式下並使用一個標識符命名錶(即[dbo].[PersonAddress]
),您可以獲得相同的結果。
在我們所有的開發機器上運行SQL Server Developer Edition之前,我還將它們用於開發人員與開發人員開發人員(當時我們的職業生涯中有一個集中式開發數據庫)。
This article很好地解釋了它,包括從SQL Server 2000到2005的變化。
不要混淆SQL 2000和SQL 2005,SQL 2000不能正確支持模式,而SQL 2005可以。兩者之間的區別很重要。 – 2008-10-31 19:09:56
如果你看一下sql 2000中表的屬性,它表示dbo是所有者。如果你看看SQL 2005的屬性,它說dbo是架構。這可能是我的困惑 – Jeremy 2008-10-31 21:00:38