我一直觉得SQL Server模式非常混乱。也许你们可以帮我解决一些困惑。我正在使用SQL Server 2008 Express和MS SQL Server 2008 Management Studio,但我认为我的问题与任何MS SQL Server 2008版本相关。我一直在不同的服务器上试验不同的数据库和不同的SQL Server实例。例如,我一直在我们公司的服务器上做一些工作,但我也在我的共享网络托管服务器上的一些数据库上工作了很多。这可能是我陷入一些困惑的部分原因。
1)这个模式名称来自哪里?我想几周前我第一次开始搞乱SQL Server时,我没有看到任何模式名称附加到表名。我在导入数据库或使用MS Access Migration Assistant时开始看到它们。有可能根本不使用模式吗?在某些情况下他们不会出现吗?
2)架构名称不是“dbo”?在最近的项目中,我的架构显示为MyLongUserName.tablename而不是dbo.tablename。我很困惑为什么有时用户帐户似乎默认为dbo架构,有时候它被分配给与用户帐户同名的架构。这与使用NT身份验证和SQL Server身份验证登录有什么关系吗?
3)用户名为dbo?我不记得在我正在使用的数据库中创建名为dbo的用户,但我在用户列表中看到了这个用户。用户帐户“dbo”是否必须存在才能存在架构“dbo”?用户名和模式名称是否始终并行?
4)是否使用模式 - 是否可以不使用模式?您是否将基础网站的小型项目(如两个或三个表数据库)用于模式?您可以完全避免使用模式,还是仅使用默认的“dbo”模式?即使在非常小的项目中,您是否会创建其他架构并为其分配某些权限和用户帐户?
我一直在使用 Murach的SQL Server 2008 for Developers 这本书,我没有发现它对于消除我的困惑过于有用。我正在读这样的句子: “如果你在创建对象时没有指定架构,它们就会存储在默认架构中。” 等等,怎么做我知道“默认架构”是什么?我们是在谈论用户帐户的默认架构还是每个数据库都有“默认架构”?它总是“dbo”吗?为什么在创建对象时是将它们分配给模式MyLongUserName而不是“dbo”?
答案 0 :(得分:14)
您可能需要先阅读此内容:What good are SQL Server schemas?
从SQL Server 2005开始,模式与用户http://msdn.microsoft.com/en-us/library/ms190387.aspx分开。
在此之前,每个用户拥有几个表,这些表将位于“空间”中。那个“空间”现在是一个模式,这是一种分组表的方法。
SQL Server对象的名称有4个部分
每当你省略其中一个或多个时,你就是从右边命名
“dbo”是一种特殊的架构,它是数据库所有者。它存在于每个数据库中,但您可以将模式(如文件夹)添加到数据库
如果从较旧的SQL Server 2000 dbs安装迁移到2005或更高版本,则可以引入schemas-named-as-users,因为用户“拥有”了这些表。