Dan*_*iel 217
dbo是SQL Server中的默认架构.您可以创建自己的模式,以便更好地管理对象名称空间.
Fen*_*ton 81
如果您使用的是Sql Server Management Studio,则可以通过浏览到数据库 - 数据库 - 安全 - 架构来创建自己的架构.
使用脚本创建一个就像(例如)一样简单:
CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]
Run Code Online (Sandbox Code Playgroud)
您可以使用它们对表进行逻辑分组,例如,通过为"财务"信息创建模式,为"个人"数据创建另一个模式.您的表格将显示为:
Financial.BankAccounts Financial.Transactions Personal.Address
而不是使用dbo的默认架构.
Man*_*ngo 11
Microsoft在 2008 版本中引入了schema。对于不了解 schema 的人和不关心的人,将对象放入默认 schema 中dbo。
dbo 代表数据库所有者,但这并不重要。
将架构视为文件文件夹:
您始终可以从任何架构访问任何对象。
因为dbo是默认值,您通常不需要在单个数据库中指定它:
SELECT * FROM customers;
SELECT * FROM dbo.customers;
Run Code Online (Sandbox Code Playgroud)
意思是一样的。
我倾向于不同意总是使用dbo.前缀的概念,因为代码中不必要的细节越混乱,阅读和管理就越困难。
大多数情况下,您可以忽略架构。但是,模式将在以下情况下变得明显:
如果您在对象导航器或外部应用程序(如 Microsoft Excel 或 Access)中查看表,您将看到dbo.前缀。你仍然可以忽略它。
如果您引用另一个数据库中的表,则需要采用以下形式的全名database.schema.table:
SELECT * FROM bookshop.dbo.customers;
Run Code Online (Sandbox Code Playgroud)
由于历史原因,如果您编写用户定义的标量函数,则需要使用架构前缀调用它:
CREATE FUNCTION tax(@amount DECIMAL(6,2) RETURNS DECIMAL(6,2) AS
BEGIN
RETURN @amount * 0.1;
END;
GO
SELECT total, dbo.tax(total) FROM pricelist;
Run Code Online (Sandbox Code Playgroud)
这不适用于其他对象,例如表函数、过程和视图。
您可以使用架构来克服命名冲突。例如,如果每个用户都有一个个人模式,他们就可以创建额外的对象,而不必与其他用户争夺名称。