至少在我的本地实例上,当我创建表时,它们都带有“dbo.”前缀。为什么呢?


当前回答

它是SQL 2005的新特性,提供了一种简化的对象分组方法,特别是为了保护“组”中的对象。

下面的链接更深入地解释了它是什么,为什么我们要使用它:

理解SQL Server中owner和schema的区别

其他回答

dbo是SQL Server的默认模式。您可以创建自己的模式,以便更好地管理对象名称空间。

如果您正在使用Sql Server Management Studio,您可以通过浏览“数据库-您的数据库-安全性-模式”创建自己的模式。

使用脚本创建一个简单的方法如下(例如):

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

您可以使用它们对表进行逻辑分组,例如为“财务”信息创建一个模式,为“个人”数据创建另一个模式。你的表格将显示为:

金融。bankaccount 金融。交易 个人的。地址

而不是使用dbo的默认模式。

DBO是SQL Server的默认模式。您可以创建自己的模式,以便更好地管理对象名称空间。作为最佳实践,我总是添加“DBO.”前缀,即使这不是必需的。在SQL中,大多数情况下显式是很好的。

微软在2005版中引入了schema。对于那些不了解模式和不关心模式的人来说,对象被放到默认模式dbo中。

dbo代表数据库所有者,但这并不重要。

把模式想象成文件的文件夹:

如果对象在相同或默认模式中,则不需要引用模式 通过使用模式作为前缀,可以引用不同模式中的对象,就像引用不同文件夹中的文件一样。 你不能在一个模式中有两个同名的对象,但是你可以在不同的模式中 使用模式可以帮助您组织大量的对象 模式还可以分配给特定的用户和角色,因此您可以控制访问谁可以做什么。

通常可以从任何模式访问任何对象。但是,可以控制哪些用户拥有对特定模式的访问权限,因此可以在安全模型中使用模式。

因为dbo是默认值,你通常不需要在单个数据库中指定它:

SELECT * FROM customers;
SELECT * FROM dbo.customers;

意思相同。

我倾向于不同意总是使用dbo的概念。前缀,因为你的代码中不必要的细节越多,就越难阅读和管理。

在大多数情况下,您可以忽略模式。然而,在以下情况下,模式会很明显:

If you view the tables in either the object navigator or in an external application, such as Microsoft Excel or Access, you will see the dbo. prefix. You can still ignore it. If you reference a table in another database, you will need its full name in the form database.schema.table: SELECT * FROM bookshop.dbo.customers; For historical reasons, if you write a user defined scalar function, you will need to call it with the schema prefix: 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; This does not apply to other objects, such as table functions, procedures and views.

您可以使用模式来克服命名冲突。例如,如果每个用户都有一个个人模式,他们可以创建额外的对象,而不必与其他用户争夺名称。

它是SQL 2005的新特性,提供了一种简化的对象分组方法,特别是为了保护“组”中的对象。

下面的链接更深入地解释了它是什么,为什么我们要使用它:

理解SQL Server中owner和schema的区别