更好地理解SQLServer中的Schema

时间:2013-06-12 19:27:41

标签: sql sql-server

就像标题一样,我仍然是SQLServer的新手,当我创建一个表'Mytable'时,它在数据库中显示'dbo.Mytable'

但是有人能让我更好地理解架构吗?

此外,在Server 2008 TSQL一书中,Itzik说'在你的数据库中,表属于schema,schema属于你自己的数据库'

然后如何定义架构?

3 个答案:

答案 0 :(得分:2)

如果您不熟悉SQL Server和数据库,那么架构的概念可能会令人困惑。基本的理解是:

A schema is the unit of security (as described [here][1] if you must know).

A database is the unit of backup and recovery.

如果您是SQL Server新手,安全性可能不是您的首选。您认为“用户可以访问数据库,因此数据库是安全的单位”。这不仅有意义,而且这就是有多少数据库实现安全性。

然而,它并不是特别灵活。假设我们都在数据库中工作,我想给你所有存储过程的执行权限 - 即使是我将来创建的存储过程。使用模式,很容易。我授予您对架构的执行权限,您可以使用的任何新内容。

如果我必须在数据库级别执行此操作,那么我会有一些较差的选项:

  1. 授予您访问所有存储过程的权限。即使是删除服务器上只有特殊人员才能访问的内容的那个。甚至是数据库中其他人开发的那些。
  2. 授予您访问所有现有存储过程的权限。但后来我为应用程序添加了一个新的应用程序,并且您的应用程序停止工作。
  3. 将所有内容分解为不同的数据库,但这会成为管理的噩梦。
  4. 这仅作为模式如何管理数据库中的安全性的示例。通过将所有内容默认为dbo(代表“数据库所有者”),SQL Server使它们变得非常容易使用。当你遇到需要它们的情况时,它们的力量才会变得明显。在此期间,只需习惯在某些上下文中使用dbo(例如,用于访问链接服务器上的对象和调用用户定义函数的四部分命名)。

答案 1 :(得分:2)

“新风味”是使用类似名称空间的模式。

默认的“dbo”可以追溯到很久。

但我将模式名称视为名称的一部分。

喜欢,我从不写

Select * from Employee

我总是写

Select ColA, ColB from dbo.Employee

我会获得AdventureWorks数据库的副本,它有很好的例子。

修改..........

Microsoft SQL Server 2005引入了数据库对象模式的概念。模式类似于用于存储数据库对象的单独名称空间或容器。安全权限适用于模式,使其成为基于访问权限分离和保护数据库对象的重要工具。对于数据库的安全相关管理,模式可以减少所需的工作并提高灵活性。

http://msdn.microsoft.com/en-us/library/dd283095%28v=sql.100%29.aspx

答案 2 :(得分:1)

Schema是DB对象的容器。这是一个帮助您更好地组织表格的约定。