每个数据库包含一个或多个Schema。数据库中的每个Schema包含表和其他类型的对象。数据库创建初始,默认具有一个名为public的Schema,且所有用户都拥有此Schema的usage权限,只有系统管理员和初始化用户可以在public Schema下创建函数、存储过程和同义词对象,其他用户即使赋予create权限后也不可以创建上述三种对 象。可以通过Schema分组数据库对象。Schema类似于 *** 作系统目录,但Schema不能嵌套。默认只有初始化用户可以在pg_catalog模式下创建对象。
schema很重要,每个数据都得建schema,有时候我们不指定schema那么数据库也会默认当前登录用户的名为schema.为什么建schema呢,你可能把他当成一个命名空间或一个架构来看,CREATE SCHEMA 提供了在SQL语句中创建表、视图以及授予对象权限的方法,区别重名,比较有的人就是怕索引名同名,所以创建schema,跟他的表的索引区别开来,同时可以让索引,表,视图不在同一个命名空间,让没有权限的用户不能 *** 作。为什么要这个分开命名空间呢,好处主要是对表的查询速度会有所提高,如果把索引跟表同在一个命名空间,那数据库表空间变小,因为索引是占空间的。这样就会影响到查询表速度。在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQLServer和Orcal数据库中好像又不一样.
目前我只能理解,在mysql中
schema<==>database。
数据库中User和Schema的关系
假如我们想了解数据库中的User和Schema究竟是什么关系,首先必须了解一下数据库中User和Schema到底是什么概念。
在SQL
Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和Schema是两种完全不同的概念,不过在SQL
Server2005中这种架构被打破了,User和Schema也被分开了。
首先我来做一个比喻,什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们可以可以把Database看作是一个
大仓库
,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了J。,然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床,
User就是每个Schema的主人,(所以Schema包含的是Object,而不是User),其实User是对应与数据库的(即User是每个对应数据库的主人),既然有 *** 作数据库(仓库)的权利,就肯定有 *** 作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的 *** 作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,呵呵,和现实也太相似了吧。我还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了,至于分配权限的问题,我留在以后单独的blog中详述。比喻到这里,相信大家都清楚了吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)