数据库中的schema

数据库中的schema数据库中的schema

大家好,又见面了,我是你们的朋友全栈君。

         研究多租户的过程中涉及到了schema的概念,具体是什么呢?

schema的官方定义为:

schema is a collection of database objects (used by auser.). 
Schema objects are the logical structures thatdirectly refer to the databases data.
user is a name defined in the databasethat can connect to and access objects.
Schemas and users help database administratorsmanage database security.

       从定义我们可以看出:schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。
       
如果把database看作是一个仓库,仓库很多房间(schema),一个schema代表一个房间,table可以看作是每个房间中的储物柜,user是每个schema的主人,有操作数据库中每个房间的权利,就是说每个数据库映射的user有每个schema(房间)的钥匙。

       默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。访问一个表时,如果没有指明该表属于哪个schema,系统会自动加上缺省的schema。一个对象的完整名称为schema.object,而不属user.object

       MySQL中创建一个Schema和创建一个Database的效果好像是一样的,但是在sqlserverorcal数据库中效果又是不同的。
       
SQL Server 2000中,userschema总有一层隐含的关系,让我们很少意识到其实userschema是两种完全不同的概念,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schemaBosco】,schema的名字和user的名字相同。
       
SQL Server 2005中,为了向后兼容,当用sp_adduser存储过程创建一个用户的时候,sqlserver2005同时也创建了一个和用户名相同的schema,然而这个存储过程是为了向后兼容才保留的,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schemadbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录用户有默认的schema,那么所做的一切操作都是在默认的schema上进行。
       
Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。

 

              摘自《数据库中Schema(模式)概念的理解》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105690.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • redis实战之事务与持久化

    1.事务描述(1)什么是事务事务,就是把一堆事情绑在一起,按顺序的执行,都成功了才算完成,否则恢复之前的样子事务必须服从ACID原则,ACID原则分别是原子性(atomicity)、一致性(c

    2021年12月30日
  • springboot中使用SFTP文件上传

    springboot中使用SFTP文件上传最近在工作功能使用了sftp做文件上传下载的功能,在这里简单的记录一下,pom文件中引入相关的jar包<!–https://mvnrepository.com/artifact/com.jcraft/jsch–><dependency><groupId>com.jcraft</g…

    2022年10月19日
  • java mysql 分区表_mysql分区表

    java mysql 分区表_mysql分区表对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。mysql在创建表时使用PARTITIONBY子句定义每个分区存放的数据。在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区——只需要查询包含需要数据的分区就可以了。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做可…

  • linux的grep命令详解_grep -v命令

    linux的grep命令详解_grep -v命令文章目录一、grep常用命令1、语法2、范例二、grep的一些高级参数1、语法2、范例三、基础正则表达式练习1、与中括号`[]`结合2、与反向选择^结合使用3、与行首`^`和行尾$字符结合4、任意一个字符`.`与重复字符`*`5、`{}`限定连续字符范围一、grep常用命令grep的功能是分析一行信息,若其中有我们所需要的信息,就将其拿出来。需要注意的是它以整行为单位…

  • linux版navicat安装和激活成功教程「建议收藏」

    linux版navicat安装和激活成功教程「建议收藏」 原 linux版navicat安装和激活成功教程 2017年09月27日10:27:00 ispotu 阅读数:30819 &amp;amp;amp;amp;amp;lt;spanclass=&amp;amp;amp;amp;quot;tags-boxartic-tag-box&amp;amp;amp;amp;quot;&amp;a

  • python数组转化为字符串类型_python字符串类型

    python数组转化为字符串类型_python字符串类型python字符串数组转对象类型importjsoncontent=”'[{“_1″:”唐”,”_2″:12},{“_1″:”宋”,”_2″:2},{“_1″:”元”,”_2″:45}][{“_1″:”明”,”_2″:2},{“_1″:”清”,”_2″:4},{“_1″:”夏”,”_2″:5}][{“_1″:”商”,”_2″:11},{“_1″:”周”,”_2″:1},{“_1″:”晋”,”_2″:7}]”’#因为是字符串数组,一个字符串里含有三个数组,而每个数组里的对象都是以“,”隔开,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号