为什么要使用数据库模式?

时间:2009-11-23 10:34:57

标签: sql-server

我正在使用多个数据库模式的单个数据库,

e.g
[巴兹] [表3],
[富]。[表1],
[富] [表2]

我想知道为什么除了组织和权限之外,这些表是以这种方式分开的。

这有多常见,还有其他好处吗?

4 个答案:

答案 0 :(得分:18)

您可以将逻辑分组对象放在一起,并允许在架构级别设置权限。

它确实在编程中提供了更多的复杂性,因为您必须始终知道要从哪个模式获取内容 - 或者依赖于用户的默认模式才是正确的。同样,您可以使用它在不同的模式中允许相同的对象名称,以便代码只针对一个对象进行写入,而用户默认的模式决定哪个是。

我不会说这是常见的,有趣的是大多数人仍然放弃了dbo架构中的所有内容。

答案 1 :(得分:5)

对我来说,他们会因为打破ownership chaining而导致更多问题。

示例:

存储过程tom.uspFoo可以轻松使用表tom.bar,但dick.AnotherTable需要额外的权限。这意味着我必须将dick.AnotherTable的选择权授予tom.uspFoo的来电者......这会直接表格访问。

除非我完全遗漏了某些东西......

编辑,2012年2月

我问了一个问题:SQL Server: How to permission schemas?

密钥是“同一所有者”:因此如果dbo拥有dicktom架构,则所有权链 适用。我之前的回答是错误的。

答案 2 :(得分:4)

除了组织和权限之外,我不知道任何其他可能的原因。这些不够好吗? :)

对于记录 - 我总是使用单个模式 - 但后来我正在创建Web应用程序,而且只有一个用户。

答案 3 :(得分:2)

为什么这有益于以下几个原因:

  • 在多个(实例之间)共享数据 一个申请。这可能是 如果您有参考组的情况 在之间共享的数据 应用程序和一组数据 这是特定于实例的。注意不要在不同模式中的实体之间使用循环引用。含义没有从架构1中的实体到架构2中的另一个实体的外键,并且具有从架构2到其他实体中的架构1的另一个外键。

  • 数据分区:允许将数据存储在不同的服务器上 更容易。

  • 正如您所提到的,数据库级别的访问控制