以 dbo 架构命名的 SQL Server 表

Posted

技术标签:

【中文标题】以 dbo 架构命名的 SQL Server 表【英文标题】:SQL Server Tables Named With dbo Schema 【发布时间】:2011-06-17 00:02:55 【问题描述】:

我一直发现 SQL Server 架构非常令人困惑。也许你们可以帮助我消除一些困惑。我正在使用 SQL Server 2008 Express 和 MS SQL Server 2008 Management Studio,但我认为我的问题与任何 MS SQL Server 2008 版本有关。我一直在不同服务器上试验不同的数据库和不同的 SQL Server 实例。例如,我一直在我们公司的服务器上做一些工作,但我也一直在我的共享网络托管服务器上处理一些数据库。这可能是我陷入某些困惑的部分原因。

1) 这个架构名称是从哪里来的? 我想当我几周前第一次开始使用 SQL Server 时,我没有看到任何附加到表名称的架构名称。当导入数据库或使用 MS Access 迁移助手时,我开始看到它们。有可能根本不使用模式吗?他们在某些情况下不会出现吗?

2) 架构名称不是“dbo”?在最近的一个项目中,我的架构一直显示为 MyLongUserName.tablename 而不是 dbo.tablename。我很困惑为什么有时用户帐户似乎默认为 dbo 模式,而其他时候它被分配给与用户帐户同名的模式。这与使用 NT 身份验证与 SQL Server 身份验证登录有什么关系吗?

3) 名为 dbo 的用户? 我不记得在我当前正在使用的数据库中创建了一个名为 dbo 的用户,但我在用户列表中看到了它。是否必须存在用户帐户“dbo”才能使模式“dbo”存在?用户名和架构名称总是平行的吗?

4) 是否使用模式 - 你能不使用它们吗? 你是否将模式用于小型项目,例如用于基本网站的两表或三表数据库?您可以完全避免使用模式还是只使用默认的“dbo”模式?即使在非常小的项目中,您也会创建额外的架构并为其分配某些权限和用户帐户吗?

我一直在使用Murach 为开发人员编写的 SQL Server 2008 书,我发现它对于消除我的困惑并没有太大帮助。我正在阅读这样的句子“如果您在创建对象时没有指定架构,它们将存储在默认架构中。”等等,怎么做我知道“默认架构”是什么?我们是在谈论用户帐户的默认架构还是每个数据库都有“默认架构”?它总是“dbo”吗?为什么当我创建对象时,它会将它们分配给模式 MyLongUserName 而不是“dbo”?

【问题讨论】:

【参考方案1】:

您可能想先阅读以下内容:What good are SQL Server schemas?

从 SQL Server 2005 开始,架构与用户 http://msdn.microsoft.com/en-us/library/ms190387.aspx 分开。

在此之前,每个用户都拥有几个表,这些表将位于他们的“空间”中。这个“空间”现在是一个模式,它是一种对表进行分组的方式。

SQL Server 对象的名称有 4 个部分

server.database.schema.objectname

当你省略其中一个或多个时,你是从右边命名的

database.schema.objectname - 隐含的当前服务器 schema.objectname - 隐含的当前数据库 objectname - 隐含的默认模式。可以为每个用户分配一个默认架构,但默认情况下这将是“dbo”

"dbo" 是一个特殊的模式,它是数据库所有者。它存在于每个数据库中,但您可以将模式(如文件夹)添加到数据库中

如果您从 SQL Server 2000 dbs 的旧安装迁移到 2005 或更高版本,您可能会携带 schemas-named-as-users,因为用户“拥有”这些表。

【讨论】:

以上是关于以 dbo 架构命名的 SQL Server 表的主要内容,如果未能解决你的问题,请参考以下文章

关闭SQL Server管理器(SSMS)拖动时大括号及dbo(架构)的办法

具有不同所有者的 SQL Server 所有权链跨架构,用于从多个架构中选择视图

sqlserver 怎么 修改数据

SQL Server 架构命名约定

Sql server 2008拒绝了对对象 'xx表' (数据库 'xx',架构 'dbo')的 SELECT 权限解决办法

重命名 SQL Server 架构