默认情况下,对象(表、存储过程等)使用 dbo 所有者/模式设置(我认为 ms sql 2000 将其称为所有者,而 ms sql 2005 将其称为模式)
所有者/模式实际上是数据库中的角色或用户。我一直保留 dbo 的默认值,但我最近在微软培训书籍中看到了一些示例,其中一些表和存储过程具有不同的所有者/模式。什么时候这样做有好处,为什么?
默认情况下,对象(表、存储过程等)使用 dbo 所有者/模式设置(我认为 ms sql 2000 将其称为所有者,而 ms sql 2005 将其称为模式)
所有者/模式实际上是数据库中的角色或用户。我一直保留 dbo 的默认值,但我最近在微软培训书籍中看到了一些示例,其中一些表和存储过程具有不同的所有者/模式。什么时候这样做有好处,为什么?
当您有安全问题时,使用模式非常有用。
如果您有多个访问数据库的应用程序,您可能不想让后勤部门访问人力资源记录。因此,您将所有 Human Resources 表放入 hr 模式中,并且只允许 hr 角色中的用户访问它。
六个月后,物流现在需要知道内部费用账户,以便他们可以将所有这些蓝色笔调色板发送给正确的位置人员。然后,您可以创建一个存储过程,该过程以有权查看 hr 模式和物流模式的用户身份执行。物流用户永远不需要知道 HR 中发生了什么,但他们仍然可以获得他们的数据。
您还可以按照 cfeduke 建议的方式使用模式,并仅使用它们在对象浏览器中对事物进行分组。如果你正在这样做,请小心,因为当你真的只需要一个 dbo.Address 时,你可能最终会创建 Person.Address 和 Company.Address(我不是在敲你的例子,cfeduke,只是用它来说明两者地址表可能相同,也可能不同,并且 YMMV)。
在 SQL 2000 中,模式相当于数据库用户,在 SQL 2005 中,每个模式都是一个不同的命名空间,独立于创建它的数据库用户而存在。
当我需要制作稍后可能会在其他项目中使用的功能或模块时,我会使用模式,因此我将能够隔离模块使用的数据库对象。
我在过去使用过类似于命名空间的模式,因此您可以拥有多个名为 Address ( [Person].[Address]
, [Company].[Address]
) 的实体。这样做的好处是 SQL Management Studio 中的可视化组织,您可以通过将所有内容放在一个模式下并使用单个标识符(即[dbo].[PersonAddress]
)命名表来获得相同的结果。
在我们所有的开发机器上运行 SQL Server Developer Edition 之前,我也将它们用于开发人员与开发人员的开发(早在我职业生涯早期我们有一个集中式开发数据库时)。
组织
在开发环境中,对象的生产副本是 dbo,但开发人员可以在自己的模式中开发。然后代码可以非常简单地引用产品副本或其更改。使用别名可以使这项技术更加简单。
此外,生产数据库可能支持许多系统或子系统。您可以使用不同的模式将这些对象分组。
This article explains it well, including the changes from SQL Server 2000 to 2005.