为什么SQL Server中的表名以“dbo”开头?

时间:2009-06-30 06:45:18

标签: sql-server

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

5 个答案:

答案 0 :(得分:205)

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

答案 1 :(得分:78)

如果您使用的是Sql Server Management Studio,则可以通过浏览到数据库 - 数据库 - 安全 - 架构来创建自己的架构。

使用脚本创建一个就像(例如)一样简单:

CREATE SCHEMA [EnterSchemaNameHere] AUTHORIZATION [dbo]

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

Financial.BankAccounts 金融交易 Personal.Address

而不是使用dbo的默认架构。

答案 2 :(得分:19)

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

以下链接提供了更深入的解释,说明它是什么,为什么我们会使用它:

  

Understanding the Difference between Owners and Schemas in SQL Server

答案 3 :(得分:1)

Microsoft在2008版中引入了 schema 。对于那些不了解架构的人和不关心架构的人,将对象放入默认的架构dbo中。

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

想一想架构,就像要放置一个文件文件夹一样:

  • 如果对象位于相同或默认架构中,则无需引用架构
  • 您可以通过使用架构作为前缀来引用其他架构中的对象,就像您引用其他文件夹中的文件一样。
  • 在一个模式中不能有两个具有相同名称的对象,但是可以在不同的模式中
  • 使用架构可以帮助您组织更多的对象
  • 还可以将架构分配给特定的用户和角色,因此您可以控制对谁可以执行操作的访问权限。

您始终可以从任何架构访问任何对象。

由于dbo是默认设置,因此通常不需要在单个数据库中指定它:

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

表示同一件事。

我倾向于不同意总是使用dbo.前缀的概念,因为您越是使代码不必要的细节杂乱无章,则阅读和管理就越困难。

在大多数情况下,您可以忽略模式。但是,在以下情况下,该架构将很明显:

  1. 如果在对象导航器或外部应用程序(例如Microsoft Excel或Access)中查看表,则会看到dbo.前缀。您仍然可以忽略它。

  2. 如果您引用另一个数据库中的表,则将需要其全名,格式为database.schema.table

    SELECT * FROM bookshop.dbo.customers;
    
  3. 由于历史原因,如果编写用户定义的标量函数,则需要使用架构前缀来调用它:

    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;
    

    这不适用于其他对象,例如表函数,过程和视图。

您可以使用架构来克服命名冲突。例如,如果每个用户都有自己的架构,则他们可以创建其他对象,而不必与其他用户争夺名称。

答案 4 :(得分:0)

在SQL Server 2005之前,dbo被称为db的所有者,但在SQL Server 2005 dbo中,它仅引用了