2011-01-28 52 views
10

我一直在发现SQL Server架构很混乱。也许你们可以帮我澄清一些混乱。我正在使用SQL Server 2008 Express和MS SQL Server 2008 Management Studio,但我认为我的问题与任何MS SQL Server 2008版本都有关。我一直在不同的服务器上试验不同的数据库和不同的SQL Server实例。例如,我一直在我们的公司服务器上做一些工作,但我也在我的共享网络托管服务器上使用了一些数据库。这可能是我进入一些混乱的原因的一部分。以dbo架构命名的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”?

回答

12

您可能希望通过阅读这篇开始:What good are SQL Server schemas?

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

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

SQL Server对象有4个部分,以他们的名字

  • server.database.schema。对象名

每当你忽略一个或更多的人,你是从右侧将其命名为

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

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

如果从较早的SQL Server 2000 dbs安装迁移到2005或更高版本,可以将模式命名为as用户,因为用户“拥有”编辑表格。