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

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

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

时间: 2024-10-11 09:19:36

数据库中Schema、Database、User、Table的关系[转]的相关文章

数据库中Schema和Database有什么区别

在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==>database. 数据库中User和Schema的关系 假如我们想了解数据库中的User和Schema究竟是什么关系,首先必须了解一下数据库中User和Schema到底是什么概念. 在SQL Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和S

[转] 数据库中Schema和Database有什么区别

原文链接:http://blog.163.com/baibai_zheng/blog/static/51980755201022125325689/ 前言:最近接触 Laravel 的数据库迁移, 代码里的 Schema 让我对 Database 以及 两者的区别有点蒙圈了,然后就有了这篇转载. 在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==>datab

数据库中Schema(模式)概念的理解

在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema.所以schema集合看上去像用户名. 如果把database看作是一个仓库,仓库很多房间(schema),一个schema代表一个房间,table可以看作是每个房间中的储物柜,user是每个sch

【翻译自mos文章】在Oracle单机数据库中定义database service

来源于: Defining a Database Service with a Stand Alone Database (文档 ID 1260134.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.5 to 11.2.0.3 [Release 10.2 to 11.2] Information in this document applies to any platform. GOAL The DBMS_

数据库中常用的操作语句

1.显示数据库列表: show databases; -- 用于可查看你当前一共有多少个数据库! 2.使其成为当前操作数据库 use mysql; -- 打开数据库.    选择进入你想进入的数据库 show tables; -- 显示mysql数据库中的数据表. 显示的是你输入的数据库当中的所有表 3.显示数据表的表结构: descrip student; -- 用于显示student这个表的结构 4.创建数据库,建表 create database mydatabase;  -- 创建一个数

数据库中User和Schema的关系

如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念. 在SQL Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和Schema是两种完全不同的概念,不过在SQL Server2005中这种架构被打破了,User和Schema也被分开了. 首先我来做一个比喻,什么是Database,什么是Schema,什么是Table,什么是Column,什么是Row,什么是

Redshift中查看database、schema、table数据大小

1. 查看当前数据库大小以及记录行数 select trim(pgdb.datname) as database, sum(b.mbytes) as mbytes, sum(a.rows) as rows from (select db_id, id, name, sum(rows) as rows from stv_tbl_perm a group by db_id, id, name) as a join pg_class as pgc on pgc.oid = a.id join pg_n

数据库中的schema概念

原文地址:http://blog.sina.com.cn/s/blog_7952e89001010jlj.html 数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问题往往说不出个所以然来.下面,我们就以SQL Server为核心,对其模式(schema).数据库(database).表(table).用户(user)之间的关系展开讨论. 首先,我

数据库中的Schema到底是什么

参考:http://database.guide/what-is-a-database-schema/ 在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式.模式中包含了schema对象,可以是表(table).列(column).数据类型(data type).视图(view).存储过程(stored procedures).关系(relationships).主键(prima