数据库中Schema(模式)概念的理解
在学习SQL的过程中,会遇到⼀个让你迷糊的Schema的概念。实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。为了区分不同的集合,就需要给不同的集合起不同的名字,默认情况下⼀个⽤户对应⼀个集合,⽤户的schema名等于⽤户名,并作为该⽤户缺省schema。所以schema集合看上去像⽤户名。
如果把databa看作是⼀个仓库,仓库很多房间(schema),⼀个schema代表⼀个房间,table可以看作是每个房间中的储物柜,ur 是每个schema的主⼈,有操作数据库中每个房间的权利,就是说每个数据库映射的ur有每个schema(房间)的钥匙。
莱芜传媒网>乡村振兴总结我们访问⼀个表时,没有指明该表属于哪⼀个schema中的,系统就会⾃动给我们在表上加上缺省的sheman名。在数据库中⼀个对象的完整名称为schema.object,⽽不属ur.object。桂花糕怎么做
在MySQL中创建⼀个Schema和创建⼀个Databa的效果好像是⼀样的,但是在sqlrver和orcal数据库中效果⼜是不同的。
痰中在SQL Server 2000中,ur和schema总有⼀层隐含的关系,让我们很少意识到其实ur和schema是两种完全不同的概念,假如我们在某⼀数据库中创建了⽤户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和ur的名字相同。
在SQL Server 2005中,为了向后兼容,当⽤sp_addur存储过程创建⼀个⽤户的时候,sqlrver2005同时也创建了⼀个和⽤户名相同的schema,然⽽这个存储过程是为了向后兼容才保留的,当我们⽤create ur创建数据库⽤户时,我们可以⽤该⽤户指定⼀个已经存在的schema作为默认的schema,如果我们不指定,则该⽤户所默认的schema即为dbo schema,dbo房间(schema)好⽐⼀个⼤的公共房间,在当前登录⽤户没有默认schema的前提下,如果你在⼤仓库中进⾏⼀些操作,⽐如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。但是如果当前登录⽤户有默认的schema,那么所做的⼀切操作都是在默认的schema 上进⾏。
在Oracle数据库中不能新建⼀个schema,要想创建⼀个schema,只能通过创建⼀个⽤户的⽅法解决,在创建⼀个⽤户的同时为这个⽤户创建⼀个与⽤户名同名的schem并作为该⽤户的缺省shcema。即schema的个数同ur的个数相同,⽽且schema名字同ur名字⼀⼀对应并且相同。
领导有方>信息铃声按照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>下的视图⽽获取,具体细节不再赘述。