数据库中Schema、Database、User、Table的关系[转]
数据库的初学者往往会对关系型数据库模式(schema)、数据库(database)、表(table)、用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问题往往说不出个所以然来。下面,我们就以SQL Server为核心,对其模式(schema)、数据库(database)、表(table)、用户(user)之间的关系展开讨论。
首先,我们先弄清楚什么是模式。
先明确一点,SQL Server中模式(schema)这个概念是在2005的版本里才提出来的,因此SQL Server2000不支持模式这个概念(本人曾在此处吃过亏)。
模式又称架构,架构的定义是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在这里,我们可以将架构看成一个存放数据库中对象的一个容器。
上面的文字描述过于晦涩,举个简单的例子,平时要在电脑硬盘存放东西时,我们不会把所有的东西都存在一个文件夹里,而是会把不同的文件按照某一个标准分门别类,放到不同的文件夹里。而在数据库中,起到这个作用的就是架构,数据库对象(表、视图、存储过程,触发器等)按照一定的标准,存放在不同的架构里。有过java编程经验的同学都知道,命名空间名其实就是文件夹名,因此我们非常明确一点:一个对象只能属于一个架构,就像一个文件只能存放于一个文件夹中一样。与文件夹不同的是,架构是不能嵌套的,如此而已。因此,架构的好处非常明显——便于管理。
那么,现在我们来看看用户和模式(schema,即架构)有什么关系。
通过上面的分析,我们知道,一个架构可以容纳多个数据库对象,但并不是所有的用户都能访问某一个架构里的内容的,这就是所谓的权限。看下面一张表:
|
User1 |
User2 |
User3 |
User4 |
|
|
Schema1 |
Y |
Y |
N |
N |
|
Schema2 |
N |
Y |
N |
Y |
|
Schema3 |
Y |
N |
Y |
N |
通过这张表,我们可以看出,用户1可以访问架构1和架构3,用户2可以访问架构1和架构2,以此类推。
在sql server2000中,用户和架构是不分离的,到了2005才分离。其实2000中的用户和架构概念就是为用户分配固定的模式,即如下表:
|
User1 |
User2 |
User3 |
|
|
Schema1 |
Y |
— |
— |
|
Schema2 |
— |
Y |
— |
|
Schema3 |
— |
— |
Y |
综合上面所述,用户和构架的关系是多对多的——一个架构可以对应多个用户,一个用户也可以对应多个架构。
现在,我们来讨论一下,数据库(database)和模式(schema)有什么关系。
举个很浅显的例子,我们可以把数据库看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,于是乎,在不同的房间里,我们可以放不同的东西——有的放食物,有的放衣物……而这些不同的东西,就对应着我们数据库里的对象。
因此,我们可以看到,数据库与模式时一对多的关系。
总结一下,其实我们的数据库就是一个数据的大仓库,而里面创建了很多很多模式,分别放着不同的数据库对象(包括表),而不同的模式有不同的权限,于是,不同的用户就有不同的访问权限来访问某个模式里的数据库对象。
数据库中Schema、Database、User、Table的关系[转]的更多相关文章
- 数据库中Schema和Database有什么区别
在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==> ...
- 数据库中Schema(模式)概念的理解
在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...
- [转]数据库中Schema(模式)概念的理解
在学习数据库时,会遇到一个让人迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等. 如果把database看作是一个仓库,仓库很多 ...
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
黑马程序员 我们知道,在设计一个Javabean的时候,要把这些BEAN 的数据存放在数据库中的表结构,然而这些数据库中的表直接又有些特殊的关系,例如员工与部门直接有一对多的关系,学生与老师直接又多对 ...
- 【翻译自mos文章】在Oracle单机数据库中定义database service
来源于: Defining a Database Service with a Stand Alone Database (文档 ID 1260134.1) APPLIES TO: Oracle Da ...
- 用JDBC把Excel中的数据导入到Mysql数据库中
步骤:0.在Mysql数据库中先建好table 1.从Excel表格读数据 2.用JDBC连接Mysql数据库 3.把读出的数据导入到Mysql数据库的相应表中 其中,步骤0的table我是先在Mys ...
- 数据库中User和Schema的关系
如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念. 在SQL Server2000中,由于架构的原因,Us ...
- 数据库中table 和 schema的区别
什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User? 我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个 ...
- Redshift中查看database、schema、table数据大小
1. 查看当前数据库大小以及记录行数 select trim(pgdb.datname) as database, sum(b.mbytes) as mbytes, sum(a.rows) as ro ...
随机推荐
- 常用的免费Webservice接口
快递查询接口 http://webservice.36wu.com/ExpressService.asmx ip查询接口 http://webservice.36wu.com/ipService.a ...
- 新时代的Vim C++自动补全插件 clang_complete
Vimer的福音 新时代的Vim C++自动补全插件 clang_complete 使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插 ...
- sqlserver 注释提取工具
小程序大智慧,sqlserver 注释提取工具 开篇背景 我习惯在写表的创建脚本时将注释直接写在脚本里,比如 ? /*账套*/ CREATE TABLE [dbo].[AccountingBook] ...
- SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with ...
- 整合MVVM框架(Prism)
整合MVVM框架(Prism) 我们基础的框架已经搭建起来了,现在整合MVVM框架Prism,在ViewModel做一些逻辑处理,真正把界面设计分离出来. 这样方便我们系统开发分工合作,同时提高系统可 ...
- 页面缓存OutputCache
更新页面缓存OutputCache 为什么要使用OutputCache 我认为OutputCache是最简单的缓存技术了,它针对的是页面级别的,简单的一条指令就可以达到缓存的效果,有效的减轻服务器 ...
- 由IEnumerable和IEnumerator的延伸
相信大家在学习c#的时候,经常会看到IEnumerable.IEnumerator这样的接口或返回类型,在写代码时经常会对数组或List集合进行遍历.那IEnumerable和IEnumerator是 ...
- 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP
上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...
- mybatis逆向工程生成代码
1 什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...
- 【Linux】CentOS 学习笔记之一(安装配制)
如何打开命令窗口:应用程序>系统工具>终端 如何获取root 权限:在终端下,输入su 再输入密码(密码不显示在屏幕上) 如何将英文版转换成中文: [root@localhost ~]# ...