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

在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念。实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。

如果把database看作是一个仓库,仓库很多房间(schema),一个schema代表一个房间,table可以看作是每个房间中的储物柜,user是每个schema的主人,有操作数据库中每个房间的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙。

我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。在数据库中一个对象的完整名称为schema.object,而不属user.object。

在MySQL中创建一个Schema和创建一个Database的效果好像是一样的,但是在sqlserver和orcal数据库中效果又是不同的。

在SQL Server 2000中,user和schema总有一层隐含的关系,让我们很少意识到其实user和schema是两种完全不同的概念,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和user的名字相同。

在SQL Server 2005中,为了向后兼容,当用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema,dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行。

在Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。

 

按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要用来解决命名冲突问题。从概念上说,一个数据库系统包含多个Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数据库对象(表、视图、字段等),反过来讲一个数据库对象必然属于一个Schema,而该Schema又必然属于一个Catalog,这样我们就可以得到该数据库对象的完全限定名称从而解决命名冲突的问题了;例如数据库对象表的完全限定名称就可以表示为:Catalog名称.Schema名称.表名称。这里还有一点需要注意的是,SQL标准并不要求每个数据库对象的完全限定名称是唯一的,就象域名一样,如果喜欢的话,每个IP地址都可以拥有多个域名。

从实现的角度来看,各种数据库系统对Catalog和Schema的支持和实现方式千差万别,针对具体问题需要参考具体的产品说明书,比较简单而常用的实现方式是使用数据库名作为Catalog名,使用用户名作为Schema名,具体可参见下表:

最后一点需要注意的是Schema这个单词,它在SQL环境下的含义与其在数据建模领域中的含义是完全不同的。在SQL环境下,Schema是一组相关的数据库对象的集合,Schema的名字为该组对象定义了一个命名空间,而在数据建模领域,Schema(模式)表示的是用形式语言描述的数据库的结构;简单来说,可以这样理解,数据建模所讲的Schema<也就是元数据>保存在SQL环境下相应Catalog中一个Schema<名叫DEFINITION_SCHEMA>下的表中,同时可以通过查询该Catalog中的另一个Schema<名叫INFORMATION_SCHEMA>下的视图而获取,具体细节不再赘述。

 

转载于:https://www.cnblogs.com/unique1319/articles/10191566.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统中打rz命令后出现waiting to receive.**B0100000023be50

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 linux系统中打rz命令后出现 waiting to receive.**B0100000023be50 而没有出现选择文件弹出框是什么问题&#xff1a; 我本来用的是 gi…

golang学习之旅(2)- go的数据基本数据类型及变量定义方式

叮铃铃&#xff0c;这不有人在评论问下一篇何时更新&#xff0c;这不就来了嘛&#xff0c;&#x1f604; 今天我们说说golang 的基本数据类型 基本类型如下&#xff1a; //基本类型 布尔类型&#xff1a;bool 即true 、flase 类似于java中的boolean 字符类型&#xff1a;s…

StackExchange.Redis 官方文档(六) PipelinesMultiplexers

流水线和复用 糟糕的时间浪费。现代的计算机以惊人的速度产生大量的数据&#xff0c;而且高速网络通道(通常在重要的服务器之间同时存在多个链路)提供了很高的带宽&#xff0c;但是计算机花费了大量的时间在 等待数据 上面&#xff0c;这也是造成使用持久性链接的编程方式越来越…

开发优秀产品的六大秘诀

摘要&#xff1a;本文是Totango的联合创始人兼公司CEO Guy Nirpaz发表在Mashable.com上的文章。无论是在哪个行业&#xff0c;用户永远是一款产品的中心&#xff0c;本文作者就以用户为中心&#xff0c;为大家讲述了六个如何为企业产品添加功能的秘诀。 随着云计算的发展&#…

Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 引言&#xff1a; 在SpringBoot中需要使用mvnw来做相关操作&#xff0c;但是却有时候会报出达不到MavenWrapperMain的错误信息&#xff…

【前端面试】字节跳动2019校招面经 - 前端开发岗(二)

【前端面试】字节跳动2019校招面经 - 前端开发岗&#xff08;二&#xff09; 因为之前的一篇篇幅有限&#xff0c;太长了看着也不舒服&#xff0c;所以还是另起一篇吧?一、 jQuery和Vue的区别 jQuery 轻量级Javascript库Vue 渐进式Javascript-MVVM框架jQuery和Vue的对比 jQuer…

SpringBoot与SpringCloud的版本说明及对应关系

转载原文地址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

leetcode 8: 字符串转整数(atoi)

实现 atoi&#xff0c;将字符串转为整数。 该函数首先根据需要丢弃任意多的空格字符&#xff0c;直到找到第一个非空格字符为止。如果第一个非空字符是正号或负号&#xff0c;选取该符号&#xff0c;并将其与后面尽可能多的连续的数字组合起来&#xff0c;这部分字符即为整数的…

优秀产品页设计:将访问者转化成客户

摘要&#xff1a;本文是对外文《 Better Product Pages: Turn Visitors Into Customers 》的翻译&#xff0c;编译内容如下&#xff1a; 展示产品、服务的方法是其获得成功的关键。在Web上&#xff0c;你留给用户的第一印象是至关重要的。 如果有人访问你的网站&#xff0c;一定…

计算机网络学习方法

原文见&#xff1a;http://blog.csdn.net/qq_33506160/article/details/51872708 一、网络课程究竟难在哪&#xff1f; 1&#xff0e;内容比较乱 如果把《计算机网络技术基础》看做是一本计算机网络导论方面的教材&#xff0c;就不会认为乱了&#xff0c;因为导论就是为了解决知…

小程序类似抖音视频整屏切换

更新 现在已经更新了github地址和效果gif&#xff0c;可在文章最后查看。如果我的代码对你有用&#xff0c;请帮我随手star一下。 需求 最近在项目中需要加一个功能&#xff0c;在小程序中将已有的短视频功能&#xff0c;按照抖音的方式来浏览&#xff0c;整屏&#xff0c;可上…

Coding For Fun 32小时:充满创造、激情、团结的编程马拉松

摘要&#xff1a;Coding for Fun大赛是2012中国软件开发者大会&#xff08;SDCC&#xff09;的重要环节。由六名黑马学员组成的“天翼二队”&#xff0c;经过32小时的“血拼”&#xff0c;凭大赛作品“语音控”&#xff0c;获得了本次大赛的“最佳设计奖”。本文是该队队员的参…

centos6.8安装oracle12C 详细步骤讲解

2019独角兽企业重金招聘Python工程师标准>>> centos6.8安装oracle12C 详细步骤讲解 安装前环境配置 1 root身份安装依赖包 [rootdlp ~]# yum -y install binutils compat-libcap1 compat-libstdc-33 compat-libstdc-33.i686 gcc gcc-c glibc glibc.i686 glibc-deve…

解决 springboot 项目:找不到或无法加载主类

Spring Boot下无法加载主类 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我什么也没有改&#xff0c;启动服务报错如题&#xff1a;找不到或无法加载主类 解决&#xff1a;什么也不…

管理好你的愿望,人生将另一个样

别让欲望控制了你欲望是人的本性。人生在世&#xff0c;谁都会有欲望。物欲、食欲、情欲、发财欲、求知欲……欲望是消防队也无法扑灭的火。作为人&#xff0c;我们不能消除欲望&#xff0c;也不能让欲望漫无边际地增长&#xff0c;所以&#xff0c;我们应该把握好欲望的尺度&a…

25 模块和包

今日内容 import from xxx import xxxx 金庸 1. 导入模块的执行的步骤 2. 自定义模块 3. 自定义包(难点) 一个表达式 -> 一条语句 -> 语句块 -> 函数 -> 类 -> 模块 -> 包 -> 项目 包就是我们的文件夹, 包内可以写很…

【许晓笛】 EOS 智能合约案例解析(2)

详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件&#xff0c;这次向大家介绍 eosio.token.cpp 文件&#xff0c;cpp 文件即 C 代码文件&#xff0c;智能合约所有的业务逻辑内容都是在 cpp 文件中实现的。 eosio.token.cpp 文件地址&#xff1a…

java 中 transient关键字

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 java语言的关键字&#xff0c;变量修饰符&#xff0c;如果用transient声明一个实例变量&#xff0c;当对象存储时&#xff0c;它的值不需…

java中int转成String位数不足前面补零

java中int转成String位数不足前面补零 转载自&#xff1a;http://ych0108.iteye.com/blog/2174134java中int转String位数不够前面补零 String.format("%010d", 25); //25为int型 10代表前面要补的字符 10代表字符串长度 d表示参数为整数类型 今天想将int 转String 位…

Oops! the requested resource is not found!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 情况一&#xff1a;调用 dubbo 服务失败&#xff0c;报错如题&#xff1a;Oops! the requested resource is not found! 原因很简单&am…