3

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

但是谁能让我更好地理解模式?

此外,在 Server 2008 TSQL 一书中,Itzik 说“在你的数据库中,表属于模式,模式属于你自己的数据库”

那么如何定义架构呢?

4

3 回答 3

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

于 2013-06-12T19:57:12.310 回答
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. 将所有内容分解到不同的数据库中,但这将成为管理的噩梦。

这只是作为模式如何管理数据库中的安全性的示例。dboSQL Server 通过默认所有内容(代表“数据库所有者”)使它们非常易于使用。只有当您遇到需要它们的情况时,它们的力量才会显现出来。同时,只需习惯于dbo在某些上下文中使用(例如用于访问链接服务器上的对象和调用用户定义函数的四部分命名)。

于 2013-06-12T19:55:18.567 回答
1

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

于 2013-06-12T19:52:47.437 回答