﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-LeeHome's Study Notes-随笔分类-DataBase</title><link>http://www.blogjava.net/sgzhlh/category/37438.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 05 Feb 2009 08:15:31 GMT</lastBuildDate><pubDate>Thu, 05 Feb 2009 08:15:31 GMT</pubDate><ttl>60</ttl><item><title>浅谈数据库中的构架</title><link>http://www.blogjava.net/sgzhlh/archive/2009/02/04/253277.html</link><dc:creator>LeeHome</dc:creator><author>LeeHome</author><pubDate>Wed, 04 Feb 2009 08:41:00 GMT</pubDate><guid>http://www.blogjava.net/sgzhlh/archive/2009/02/04/253277.html</guid><wfw:comment>http://www.blogjava.net/sgzhlh/comments/253277.html</wfw:comment><comments>http://www.blogjava.net/sgzhlh/archive/2009/02/04/253277.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sgzhlh/comments/commentRss/253277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sgzhlh/services/trackbacks/253277.html</trackback:ping><description><![CDATA[<p>一．什么是架构？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在一个数据库中可以有多个应用的数据表，这些不同应用的表可以放在不同的schema之中，同时，每一个schema对应一个用户，不同的应用可以以不同的用户连接数据库，这样，一个大数据库就可以根据应用把其表分开来管理。<br />
不同的schema之间它们没有直接的关系，不同的shcema之间的表可以同名，也可以互相引用（但必须有权限），在没有操作别的schema的操作根权下，每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表，可以存入不同的数据（即schema用户自己的数据）<br />
　　实际上就是表名前面的名称例如：dbo.T_Users,&nbsp; Admins.T_Powers 等<br />
参考：<a href="http://www.blogjava.net/gbk/archive/2008/09/22/158080.html">http://www.blogjava.net/gbk/archive/2008/09/22/158080.html</a><br />
<br />
二．用户架构分离的好处<br />
<br />
将架构与数据库用户分离对管理员和开发人员而言有下列好处：<br />
1．多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。<br />
2．极大地简化了删除数据库用户的操作。<br />
3．删除数据库用户不需要重命名该用户架构所包含的对象。因而，在删除创建架构所含对象的用户后，不再需要修改和测试显式引用这些对象的<br />
　　应用程序。<br />
4．多个用户可以共享一个默认架构以进行统一名称解析。<br />
5．开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中，而不是 DBO 架构中。 <br />
6．可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。<br />
7．完全限定的对象名称现在包含四部分：server.database.schema.object。</p>
<p><br />
三．默认架构:<br />
　　SQL Server 2005 引入了&#8220;默认架构&#8221;的概念，用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2000 中，首先检查的是调用数据库用户所拥有的架构，然后是 DBO 拥有的架构。在 SQL Server 2005 中，每个用户都有一个默认架构，用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER 和 ALTER USER 的 DEFAULT_SCHEMA 选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA，则数据库用户将把 DBO 作为其默认架构。</p>
<p>四．对构架名的操作:<br />
<br />
schema_name 当前数据库中的架构名称，会将对象移入其中。其数据类型不能为 SYS 或 INFORMATION_SCHEMA。<br />
object_name 要移入架构中的架构包含对象的一部分或两部分名称。 <br />
table_name&nbsp; 当前数据库中的表名</p>
<p>create schema schema_name&nbsp; -- 创建构架名 (前数据库中并不存在)<br />
drop schema&nbsp; schema_name&nbsp;&nbsp; -- 删除构架名<br />
ALTER SCHEMA schema_name TRANSFER table_name&nbsp; -- 修改表名的构架名</p>
<p>select Ub.name as Schemas,Ua.name as ObjectName<br />
from sysobjects Ua inner join sys.schemas Ub on Ua.uid = Ub.schema_id<br />
where Ua.name= 'table_name'&nbsp; -- 查看表所属的构架名</p>
<p>注：<br />
&nbsp; 以上Sql 语句在 Sql 2005中可以使用，但不知道对其他版本有没有影响!</p>
<img src ="http://www.blogjava.net/sgzhlh/aggbug/253277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sgzhlh/" target="_blank">LeeHome</a> 2009-02-04 16:41 <a href="http://www.blogjava.net/sgzhlh/archive/2009/02/04/253277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>