4.5.7 模式 目录与环境

4.5.7 模式 目录与环境

要理解模式和目录的形成,需要考虑文件系统中文件是如何命名的。早期的文件系统是平面的,也就是说,所有的文件都存储在同一个目录下。当然,当代的文件系统有一个目录(或者文件夹)结构,文件都存储在子目录下。要单独命名一个文件,我们必须指定文件的完整路径名,例如,/usersavi/db-book/chapter3.tex
跟早期文件系统一样,早期数据库系统也只为所有关系提供一个命名空间。用户不得不相互协调以保证他们没有对不同的关系使用同样的名字。当代数据库系统提供了三层结构关系命名机制

  1. 最顶层由目录(catalog)构成,一些数据库实现用术语”数据库”代替术语”目录”
  2. 每个目录都可以包含模式(schema)。
  3. 诸如关系视图那样的SQL对象都包含在模式中。

要在数据库上做任何操作,用户(或程序)都必须先连接到数据库。为了验证用户身份,用户必须提供用户名以及密码(通常情况下)。每个用户都有一个默认的目录和模式,这个组合对用户来说是唯一的。当一个用户连接到数据库系统时,将为该连接设置好默认的目录和模式。这对应于当用户登录进一个操作系统时,把当前目录设置为用户的主(home)目录。

关系名字的全称

为了唯一标识出一个关系,必须使用一个名字,它包含三部分,例如:
catalog5.univ_shema.course

默认目录中的关系可以省略目录名

当名字的目录部分被认为是连接的默认目录时,可以省略目录部分。这样如果catalog5是默认目录,我们可以用univ_shema.course来唯一标识上述关系。

访问其他非默认模式中的关系必须指定模式名

如果用户想访问存在于另外的模式中的关系,而不是该用户的默认模式,那就必须指定模式的名字。

默认模式中的关系也省略模式名

然而,如果一个关系存在于特定用户的默认模式中,那么连模式的名字也可以省略。这样,如果catalog5是默认目录并且univ_schema默认模式,我们可以只用course

使用目录和模式可以解决命名冲突

当有多个目录和模式可用时,不同应用和不同用户可以独立工作而不必担心命名冲突。不仅如此,一个应用的多个版本(一个产品版本,其他是测试版本)可以在同一个数据库系统上运行。

SQL环境

  • 默认目录和默认模式是为每个连接建立的SQL环境( SQL environment)的一部分。
  • 除了默认目录和默认模式,SQL环境还包括用户标识(也称为授权标识符)。
  • 所有通常的SQL语句,包括DDLDML语句,都在一个模式的环境中运行

如何创建和删除模式

我们可以用create schemadrop schema语句来创建和删除模式

  • 在大多数数据库系统中,模式还随着用户账户的创建而自动创建,此时模式名被置为用户账号名
  • 模式要么建立在默认目录中,要么建立在创建用户账户时所指定的目录中。
  • 新创建的模式成为用户账户的默认模式

创建和删除目录依据实现的不同而不同,这不是SQL标准中的一部分。