6 逻辑结构管理

6.3 模式

6.3.1模式的定义

  • 模式将其理解为一个命名空间或目录。
  • 不同的模式下可有相同名称的表、函数且不冲突。
  • 提出模式的概念是为了便于管理,只要有权限,每个模式的对象可以互相调用。

  • 一个数据库包含一个或多个模式,模式又含表、函数及操作符
    等数据库对象。
  • 不能同时访问不同数据库中的对象,当要访问另一个数据库中的表或其他对象时,需重新连接到这个新的数据库,而模式没有限制。
  • 一个用户在连接到一个数据库后,就可以同时访问这个数据库中多个模式的对象。
  • 从这个特性来说,Postgresql中模式的概念与 MYSQL中 Database的概念是等同的。在 MYSQL中可以同时访问多个 Database中的对象,就与在 Postgresql中可以同时访问多个 Schema中的对象是一样
    的。
  • Oracle中,一个用户就对应一个 schema。
  • 不同的数据库系统( Oracle、 MYSQL)中 Database、模式这些概念的不同

  • 需要使用模式有以下几个主要原因
  • 允许多个用户在使用同一个数据库时彼此互不干扰。
  • 把数据库对象放在不同的模式下,然后组织成逻辑组,让它们更便于管理。
  • 第三方的应用可以放在不同的模式中,这样就不会和其他对象的名字冲突了

6.3.2模式的使用

6 逻辑结构管理

6 逻辑结构管理

  • 为用户“osdba”创建模式,名字也定为“ osama”:

6 逻辑结构管理

  • 创建一个模式的同时,还可在这个模式下创建一些表的视图

6 逻辑结构管理

  • 模式中修改名称和属主

6 逻辑结构管理

6 逻辑结构管理

6 逻辑结构管理

6.3.3公共模式

  • 要创建或者访问模式中的对象,需要先写出一个受修饰的名字,这个名字包含模式名及表名,它们之间用一个“点”分开

  • 创建和访问表的时候都不用指定模式,实际上这时访问的都是“ public”模式。
  • 每当创建一个新的数据库时, Pg都自动创建“public”模式
  • 当登录到该数据库时,如果没特殊指定,都以该模式(public)操作各种数据对象

6.3.4模式的搜索路径

  • 用一个数据库对象时,可用全称来定位对象,
  • 但每次都不得不键人schema name. object name,
  • 这显然很繁琐。
  • Pg提供模式搜索路径

  • Pg中同样也可通过查找一个搜素路径来判断某个表究竟是哪个模式下,这个路径是一个需要査找的模式列表。
  • 在搜索路径里找到的第一个表将被当作选定的表。
  • 如果搜索路径中没匹配的表,就报错,
    • 即使匹配表的名字在数据库其他的模式中存在也如此

  • 搜索路径中的第一个模式叫当前模式。
    • 除了是搜索的第一个模式之外,
    • 它还是在 CREATE TABLE没有声明模式名时新建表所属于的模式
  • 要显示当前搜索路径

6 逻辑结构管理

  • 上面search path的默认配置,从这个默认配置可以看到“ public"模式总是在搜索路径中。
  • 一般情况下,若创建的表默认没有指定模式,那都会在“ public”模式下。
  • “\d”总是可以把“ public”模式下的表显示出来。

6.3.5模式的权限

这儿啊

6.7表空间

6.7.1表空间的定义

  • 把不同的表放到不同的存储介质或不同的文件系统下,
    • 这时就要用表空间
  • 表空间实际是为表指定一个存储目录
  • 创数据库时可为数据库指定默认的表空间。
    • 创建表和索引时可指定表空间,
    • 这样表、索引就可以存储到表空间对应的目录下

6.7.2表空间的使用

  • 创建表空间的语法

6 逻辑结构管理

  • 示例

6 逻辑结构管理

  • 创建数据库时可以指定默认的表空间,这样以后在这个数据库中创建表、索引时,就可自动存储到这个表空间指定的目录下

6 逻辑结构管理

  • 改变一个数据库的默认表空间

6 逻辑结构管理

  • 在做该操作时,必须没有人同时连接到这个数据库上,否则报错

6 逻辑结构管理

6.8视图

6.8.1视图的定义

  • 视图就是由查询语句定义的虚拟表。
  • 对用户来说,看到的视图就如同一张真的表。
  • 从视图中看到的数据可能来自数据库中的一张或多张表,也可能来自外部,这主要取决于视图的查询语句是如何定义的。

  • 使用视图一般有以下几个原因。
  • 可使复杂的查询易于理解和使用。
  • 安全原因。视图可以隐藏一些数据,如在一张用户表中,可以通过定义一张视图,把密码等敏感字段去掉。
  • 把一些函数返回的结果映射成视图

  • 一般数据库提供的视图只读,
  • 在 Postgresql数据库中提供的视图默认也是只读的,但可以使用规则系统做出一张可更新的视图。

6.8.2创建视图

  • 语法

6 逻辑结构管理

  • 用户表“ users",
  • 包含敏感“ password",
  • 建一张视图把敏感字段“ password”排除掉

6 逻辑结构管理

  • TEMP”或“ TEMPORARY”建一张临时视图,
  • 当 session结束时这张视图就消失

6 逻辑结构管理

6 逻辑结构管理

6 逻辑结构管理

6.8.3可更新视图