schame定义及用处
一、schame详解
http://www.cnblogs.com/Neo-ds/p/4790413.html
1、先明确一点,SQL Server中模式(schema)这个概念是在2005的版本里才提出来的,因此SQL Server2000不支持模式这个概念(本人曾在此处吃过亏)。
模式又称架构,架构的定义是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在这里,我们可以将架构看成一个存放数据库中对象的一个容器。
上面的文字描述过于晦涩,举个简单的例子,平时要在电脑硬盘存放东西时,我们不会把所有的东西都存在一个文件夹里,而是会把不同的文件按照某一个标准分门别类,放到不同的文件夹里。而在数据库中,起到这个作用的就是架构,数据库对象(表、视图、存储过程,触发器等)按照一定的标准,存放在不同的架构里。有过java编程经验的同学都知道,命名空间名其实就是文件夹名,因此我们非常明确一点:一个对象只能属于一个架构,就像一个文件只能存放于一个文件夹中一样。与文件夹不同的是,架构是不能嵌套的,如此而已。因此,架构的好处非常明显——便于管理。
总结一下,其实我们的数据库就是一个数据的大仓库,而里面创建了很多很多模式,分别放着不同的数据库对象(包括表),而不同的模式有不同的权限,于是,不同的用户就有不同的访问权限来访问某个模式里的数据库对象。
http://blog.csdn.net/xuexiiphone/article/details/51252749
用户与架构的权限管理关系用上文中的小偷例子比较形象。
2、用户架构分离的好处:
将架构与数据库用户分离对管理员和开发人员而言有下列好处:
(1)多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。
(2)极大地简化了删除数据库用户的操作。
(3)删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。
(4)多个用户可以共享一个默认架构以进行统一名称解析。
(5)开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。
(6)可以用比早期版本中的粒度更大的粒度管理架构和架构包含的对象的权限。
二、 Sql Server需要架构(Schema)的真实原因
http://blog.csdn.net/hejisan/article/details/52292874
schema相当于一个数据库中的两个子数据库,事务回滚时能够保持数据一致性。
设想有一系统S1, 使用一数据库Db1, 另有一系统S2, 使用数据库Db1 和 Db2。S1 只操作 Db1;S2 同时操作 Db1 和Db2。系统S2知道系统S1的存在,并且需要自己的一些数据,所以创建了Db2以存放自己的数据。系统S1使用用户U1,系统S2使用用户U2,U1拥有Db1的访问权,U2拥有Db1和Db2的访问权,系统S1不知道Db2和系统S2的存在。S2 的日常操作也是在事务包装下的,并不会造成 Db1和Db2的数据不一致。S1和S2并行运行,工作良好。
直到有一天,硬件系统发生了严重故障,这时Db1 和 Db2进行日志回滚。单独检查Db1和Db2的数据,没有任何问题。
但是,Db1和Db2的数据一致性现在可能就有问题了,因为Db1 和Db2 的回滚之间没有任何同步机制。在一个涉及Db1和Db2的复杂事务中,Db1的数据可能已写入,没有被丢弃,而Db2中的数据可能在回滚时被丢弃了;反之亦然,于是产生了一致性问题。
这时,就轮到我们的主角,架构发挥用处的时候了,建立一个大的数据库Db,Db1和Db2改成为架构S1和S2,用户U1拥有架构S1的访问权,用户U2拥有架构S1和S2的访问权。你就会发现,现在任何时候都没有一致性问题了。当数据库需要回滚的时候,因为在同一数据库中,架构S1和S2之间没有任何一致性问题。
三、Sql server 2005中schema的用法总结
http://jizhonglee.blog.51cto.com/3003732/805201
用Schema 加快了查询的执行时间
在没有制定schema的情况下是按照如下的顺序执行查找的
首先搜寻sys.mytable (Sys Schema)
然后搜寻Sue.mytable (Default Schema)
最后搜寻 dbo.mytable (Dbo Schema)
如果指定schema的话就不用去扫描Sys Schema了,这样就加快了查询的时间,从而提高了执行效率。
对表的查询速度会有所提高,如果把索引跟表同在一个命名空间,那数据库表空间变小,因为索引是占空间的。这样就会影响到查询表速度。
schame定义及用处的更多相关文章
- .NET里简易实现AOP
.NET里简易实现AOP 前言 在MVC的过滤器章节中对于过滤器的使用就是AOP的一个实现了吧,时常在工作学习中遇到AOP对于它的运用可以说是很熟练了,就是没想过如果自己来实现的话是怎么实现的,性子比 ...
- 超文本传输协议-HTTP/1.1
超文本传输协议-HTTP/1.1(修订版) ---译者:孙超进本协议不限流传发布.版权声明Copyright (C) The Internet Society (1999). All Rights R ...
- Windows系统环境变量path优先级测试报告
转自:http://bluekylin.cnblogs.com/archive/2005/12/16/298797.html 总以为自己很已经会操作windows了,今天在它帮助中看到一大片还不知道的 ...
- mongoengine中collection名称自动生成机制浅探
项目碰到要使用mongodb的场景,以前只听过这一强大的文档数据库,但一直没有真正使用过,参考一下项目中已有的使用代码,是通过import mongoengine这一模块实现python服务对db中c ...
- 学以致用,通过字节码理解:Java的内部类与外部类之私有域访问
目录: 内部类的定义及用处 打开字节码理解内部类 一.内部类的定义及用处 内部类(inner class)是定义在另一个类中的类.使用内部类,我们可以: 访问该类定义所在的作用域中的数据,包括私有的数 ...
- XML--XML Schema Definition(一)
参考 https://blog.csdn.net/wangw2008/article/details/83195283 https://blog.csdn.net/lmj623565791/artic ...
- JavaScript编程入门
写在前面: 不管容易还是简单 总要尝试才知道答案 1.JavaScript初探 JavaScript:轻量级脚本语言,是可插入HTML页面的编程代码. 将JavaScript插入HTML页 ...
- 深入理解javascript函数定义与函数作用域
最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
随机推荐
- linux 软/硬链接详解
SYNOPSIS ln [OPTION]... [-T] TARGET LINK_NAME (1st form) ln [OPTION]... TARGET (2nd form) ln [OPTION ...
- 嵌套表用法详解(PLSQL)
嵌套表 嵌套表是一种类似于索引表的结构,也可以用于保存多个数据,而且也可以保存复合类型的数据 嵌套表指的是一个数据表定义事同时加入了其他内部表的定义,这一概念是在oracle 8中引入的,它们可以使用 ...
- 《linux 计划任务》- cron
一:什么是计划任务 - 你给手机定了一个闹钟,每天的 7:00 会准时响铃叫你起床,这实际上就是一个计划任务 - 所谓定时任务,就是在已经定好的特定时间去执行的事情. - Cron是一个[守护程序]用 ...
- jvm的调优
首先我们要知道jvm的调优,主要是对那些部分的优化.通过jvm内存模型我们可以,首先是分析遇到的问题,然后通过一些工具或者手段找到问题所在,然后通过一定的措施解决问题,下面我们也将按着这个思路来给出具 ...
- IIS添加Expires头
今天的Web页面包含大量组件,并且数量不断增长:页面的初访问者会进行很多HTTP请求,但通过使用一个长久的Expires头,使这些组件可以被缓存.这会在后续的页面浏览中避免不必要的HTTP请求.长久的 ...
- ES6面试题总结
1.说出至少5个ES6的新特性,并简述它们的作用.(简答题) 1.let关键字,用于声明只在块级作用域起作用的变量: 2.const关键字,用于声明一个常量: 3.结构赋值,一种新的变量赋值方式.常用 ...
- TCP/IP具体解释--TCP首部的TimeStamp时间戳选项
TCP应该是以太网协议族中被应用最为广泛的协议之中的一个,这里就聊一聊TCP协议中的TimeStamp选项.这个选项是由RFC 1323引入的,该C建议提交于1992年.到今天已经足足有20个年头.只 ...
- 【SQL】where 后不可以接聚合函数,都哪些是聚合函数?
where 后不可以接聚合函数,比如函数:SUM(count),AVG(count),MIN(count),MAX(count)
- python-面向对象-14_eval函数
eval 函数 eval() 函数十分强大 —— 将字符串 当成 有效的表达式 来求值 并 返回计算结果 # 基本的数学计算 In [1]: eval("1 + 1") Out[1 ...
- linux 修改文件内容 vi命令
vi编辑器是所有Unix及Linux系统下标准的编辑器,介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它 ...