数据库的初学者往往会对关系型数据库模式(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代表一个房间,于是乎,在不同的房间里,我们可以放不同的东西——有的放食物,有的放衣物……而这些不同的东西,就对应着我们数据库里的对象。

因此,我们可以看到,数据库与模式时一对多的关系。

总结一下,其实我们的数据库就是一个数据的大仓库,而里面创建了很多很多模式,分别放着不同的数据库对象(包括表),而不同的模式有不同的权限,于是,不同的用户就有不同的访问权限来访问某个模式里的数据库对象。

参考资料:

http://tech.ddvip.com/2009-01/1231832216105719.html

http://tech.ddvip.com/2009-01/1231832308105720.html

http://topic.csdn.net/u/20081226/23/d1570ce9-e183-453c-90ec-c6c0f297d8ff.html

SQL Server中模式(schema)、数据库(database)、表(table)、用户(user)之间的关系的更多相关文章

  1. 此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行

    错误提示:此操作只能由 SQL Server 中拥有配置数据库读取权限的用户在已加入到某个服务器场的计算机上执行.若要将此服务器连接到服务器场,请使用 SharePoint 产品配置向导,该向导可从 ...

  2. SQL SERVER 判断是否存在数据库、表、列、视图

    SQL SERVER 判断是否存在数据库.表.列.视图 --1. 判断数据库是否存在 IF EXISTS (SELECT * FROM SYS.DATABASES WHERE NAME = '数据库名 ...

  3. PostgreSQL表空间、模式、表、用户/角色之间的关系

    PostgreSQL表空间.模式.表.用户/角色之间的关系是本文我们主要要介绍的内容,表空间,数据库,模式,表,用户,角色之间的关系到底是怎样的呢?接下来我们就开始介绍这一过程. 实验出角色与用户的关 ...

  4. sql server中的系统数据库

    1.master数据库 master是SQL Server中最重要的数据库,是整个数据库服务器的核心.用户不能直接修改该数据库,如果损坏了master数据库,整个SQL Server服务器将不能工作. ...

  5. SQL Server中用户账号在数据库中的安全性,可以控制用户的权限

    今天在公司SQL Server数据库中,查到一个SQL Server用户账号"DemoUser": "DemoUser"不在数据库服务器的sysadmin角色中 ...

  6. SQL Server中查询某个数据库中表的个数

    --SQL Server中 数表: SELECT * FROM SYSOBJECTS WHERE xtype = 'U'; SELECT COUNT(*) FROM SYSOBJECTS WHERE ...

  7. SQL Server中创建sde数据库

    在ArcCatalog或者ArcMap中打开ArcToolBox工具箱. 在工具箱中,找到创建企业级地理数据库工具,依次为数据管理工具→地理数据库管理→创建企业级地理数据库,如图所示. 双击打开创建企 ...

  8. SQL Server中使用msdb数据库的存储过程sp_delete_backuphistory和sp_delete_database_backuphistory来删除备份和恢复历史数据

    根据微软文档对sp_delete_backuphistory存储过程的介绍,SQL Server在每次备份和恢复数据库后,会向msdb系统数据库的备份和恢复历史表写入数据,如果SQL Server经常 ...

  9. sql server DDL语句 建立数据库 定义表 修改字段等

    一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...

随机推荐

  1. 腾讯短信平台ASP接口范例

    疫情后一个小项目要用到腾讯短信平台,因为比较老,用ASP写的,平台没有相应的ASP接口,百度不到,无奈之下自己写了一个,也方便需要的朋友们. 主要代码如下: <!--#include file= ...

  2. baby sqli 联合查询加入数据 手工注入

    0x00 BabySQli 原题目描述:刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码! 登陆页面,查看源码后点进search.php看到一段可疑的句子MMZFM42 ...

  3. LSB隐写加密MISC

    没有做过LSB隐写加密的题目,在buuoj上面做到了就记录一下,估计后面很长的时间都会在这个平台上面训练自己的MISC和WEB,是很好的平台,把很多比赛的原题和安恒的周赛的复现了. 题目是MISC里面 ...

  4. Spring RestTemplate具备负载均衡功能

     在创建RestTemplate的Bean时使用@LoadBalanced注解, 就可以自动配置为使用ribbon.如下面的示例所示: @Configuration public class MyCo ...

  5. Win10新增API

    Win10新增API为以下一些方面: Windows.AI Windows.ApplicationModel Windows.Devices Windows.Globalization Windows ...

  6. hive实例的使用

    一.hive用本地文件进行词频统计 1.准备本地txt文件 2.启动hadoop,启动hive 3.创建数据库,创建文本表 4.映射本地文件的数据到文本 5.hql语句进行词频统计交将结果保存到结果表 ...

  7. Python Windows开发环境搭建

    一.下载python安装包 python官网地址:https://www.python.org/,下载windows平台包并安装 二.在Windows设置环境变量 计算机右键,选择属性,在高级系统设置 ...

  8. oracle 11g调优常用语句

    1.查询表的基数及选择性 select a.column_name,       b.num_rows,       a.num_distinct cardinality,       round( ...

  9. Java File类的简单使用

    Java File的简单使用(创建.删除.遍历.判断是否存在等) Java文件类以抽象的方式代表文件名和目录路径名.该类本身不能用来读数据或写数据,它主要用于磁盘上文件和目录的创建.文件的查找和文件的 ...

  10. Docker修改默认的网段

    一,问题 docker安装后默认的网段是172.17网段的,和真实环境网段冲突导致本机电脑无法连接docker机器. 二,解决办法 修改docker默认网段 1,先把docker停止 systemct ...