数据库管理系统的层次结构--语言处理层

语言处理层

关系数据库管理系统一般向用户提供多种形式的语言(SQL/ESQL/过程化SQL和存储语言),这些语言都是由关系数据库管理系统的语言处理层来处理。

一、语言处理层的任务和工作步骤

任务: 把用户在各种方式下提交给关系数据库管理系统的数据库语句换成对关系数据库管理系统内层可执行的基本存储模块的调用序列。
数据库语言通常包括数据定义语言、数据操纵语言和数据控制语言。对数据定义语句,语言处理层完成语法分析后,首先把它翻译成内部表示,然后把它存储在系统的数据字典中。对数据控制语句的定义部分,如安全保密定义、存取权限定义、完整性约束定义等的处理与数据定义语句相同。
数据字典是数据操纵的处理、执行以及关系数据库管理系统运行管理的基本依据。它包括关系定义表、属性表、视图表、视图属性表、视图表达式表、用户表、用户权限表等。
关系数据库管理系统中数据操纵语言语句的处理过程–束缚过程:
数据库管理系统的层次结构--语言处理层_第1张图片
对数据操纵语句,语言处理层要做的工作比较多。数据操纵语句处理过程如下:

  1. 对数据操纵语句进行词法分析和语法分析,并把外部关系名、属性名转换为内部名。
    外部名便于用户记忆和使用,内部名则整齐划一。在符号名转换过程中需存取数据字典。词法和语法分析通过后便生成语法分析树。外部名便于用户记忆和使用,内部名则整齐划一。在符号名转换过程中需存取数据字典。词法和语法分析通过后便生成语法分析树。
  2. 根据数字典中的内容进行查询检查,包括审核用户的存取权限和完整性检查。
    完整性检查是查询检查的重要内容。关系数据库管理系统参照数据字典中的完整性约束规则,这时只是进行部分静态约束检查,如检查数据的类型、范围是否符合数据定义。很多完整性约束条件是在执行时检查的,以保证主码的唯一性。同样,这是也要检查参照完整性约束(若有的话)。
    查询检查还包括视图消解,也称为视图转换。视图转换是指,若数据操作语言语句涉及对视图的操纵,则首先要从数据字典中取出视图的定义,根据该定义把对视图的操作转换为对基本表的操作。
  3. 对查询进行优化。
    1)代数优化
    2)存取路径优化。它要根据数据字典中记载的各种信息,按照一定的优化策略选择一个系统认为的“较好”的存取方案,并把选中的方案描述出来。

将数据库操纵语句转换成一串可执行的存取动作这一过程称为一个逐步束缚(bind)的过程。它将数据操纵语言高级的描述型语句(集合操作)转换为系统内部低级的单元组动作。

二、解释方法

解释方法的具体做法是指直到执行前,数据操纵语言都以原始字符串的形式保存,当执行到该语句时,才利用解释程序去完成数据操纵语句的处理过程–束缚过程,同时予以执行。这种方法通过进来推迟束缚过程来赢得数据独立性。
优点: 灵活、应变性强,甚至能适应在解释过程中发生的数据结构、存储结构等的变化,因此能保持较高的数据独立性。
缺点: 每次执行一个数据操作语句时都要执行束缚过程的所有步骤,尤其当这样的语句位于一个循环体内时,就要多次重复解释一个数据操纵语句,开销会很大,因此效率比较低。
适用: 交互式SQL。

三、预编译方法

预编译方法的基本思想是指在用户提交数据操纵语句之后,在运行之前对它进行翻译处理,保存产生好的可执行代码。当需要运行时,取出保存的可执行性代码加以执行。
DB2处理嵌入SQL语句的应用程序的过程图示:
数据库管理系统的层次结构--语言处理层_第2张图片
假定被处理对象是一个C语言源程序P,它首先被一个预编译器处理。这个预编译器的功能是识别SQL语句,把它们替换成源语言的函数调用(原来的SQL语句作为注解句生成一个数据库请求模块(DBRM)),它是下一步束缚过程的输入。
修改后的C源程序按通常方式被编译、连接处理,生成装载模块。
束缚过程实际上是一个SQL语句的优化编辑器,编译一个至多个数据库请求模块,生成应用规划。应用规划包含了基本存取模块的调用,完成数据库请求模块对应的源SQL语句的功能。
这样,一个C源程序被分成了装载模块和应用规划。在运行时,当装载模块执行过程中遇到访问数据库的函数调用时,就把控制权交给运行监督器。运行监督器找到相应的应用规划后将其调入内存并转让控制权,然后由应用规划去启用数据存储管理器执行实际的数据存取,并将结果返回给C程序。
该方法存在的问题
在束缚过程中运行优化所依据的条件可能在运行前已不存在,或者数据库结构已被修改,因而导致已作出的应用规划在执行时不再有效。
解决方法–重编译
当数据库中因某些成分的改变而使一些程序(语句)的编译结果无效时,再对它们执行一次编译。重编译可在不同时刻进行。为了提高整个系统的效率,不应在数据库某一成分改变后就立即对受影响的那些源程序重编译,较好的方法是将受影响的编译结果置“无效”标志,在其被执行时才进行自动重编译。
自动重编译技术使得预编译方法既有了编译时进行束缚所带来的高效率,也具备了执行时束缚带来的数据独立性。预编译方法的效率比其他方法提高两倍以上。

你可能感兴趣的:(数据库)