以 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 表的主要内容,如果未能解决你的问题,请参考以下文章