位置:51电子网 » 技术资料 » 其它综合

数据库触发器机制设计与实现

发布时间:2008/6/5 0:00:00 访问次数:353

数据库管理系统作为信息系统的核心部件,在信息化时代所充当的角色是其它任何软件所不能替代的。当前数据库应用的一个普遍要求是数据库管理系统能够在一些数据库相关事件发生时触发预先定义的操作,实现信息管理的自动化,因此引进了触发器机制。触发器可以增强引用完整性,加强复杂业务的规则,或者监控数据库的变动,并执行一定的数据操作。   

触发器机制实现主要涉及触发事件的检测以及触发条件的判决等关键技术问题,以及对触发器的编译存储和调用执行等具体操作。   

本文以国产数据库管理系统gkd-base为原型,在兼容oracle 规范的pl/sql引擎基础上,提出一套解决方案,对触发器的关键技术问题进行了探讨,并设计实现了数据库的触发器机制,扩
展了数据库管理系统gkd-base的功能。   

1 gkd-base pl/sql 引擎

gkd-base数据库是一个具有自主知识产权的数据库管理系统,具有兼容sql89标准的sql引擎,能够为用户提供一个统一、有效的数据库访问接口(xapi),实现对数据库的各种操作。为了融合sql语言强大的集合数据处理能力和第三代语言(3gl)灵活的过程处理能力,在gkd-base上已初步实现了兼容oarcle pl/sql v.23的pl/sql引擎。   

gkd-base pl/sql引擎包括编译器、解释器和异常处理三个模块。在编译阶段,根据pl/sql语言兼有过程式语句和sql语句的特点,采取分而治之策略,把过程语句和sql语句分开处理。对于sql语句,编译器首先建立sql语句结点,进行相应的变量绑定和语法检查;检查无误后产生语法树形式的中间代码。对于过程语句,编译器将对语句成分进行语法分析,对声明的变量和数据类型建立相应的符号表,最终产生语法树形式的中间代码。解释器的作用是对编译器生成的中间代码进行解释执行。解释器与编译器对应,具有相对独立的sql语句解释模块和过程语句解释模块。另外,解释器还包括执行状态堆栈的管理、与gkd-base sql引擎的调用接口。异常处理模块主要实现程序运行时的错误检查和报告,并支持用户自定义异常和预定义异常的检查和处理。   

gkd-base pl/sql引擎可以实现对过程式语句、sql语句与游标、存储子程序及包的编译和解释执行。   

2 触发器实现的关键问题

触发器定义了当某些数据库相关事件发生时数据库应采取的动作。触发器可增强引用完整性,加强复杂业务的规则或者监控数据库的变动,其实现主要涉及到触发事件的检测以及触发条件的判决等关键技术问题。   

2.1 触发器的事件检测机制

触发器事件检测机制包括对事件的检测和存储,是实现触发器的关键。触发器检测的事件类型比较简单,基本事件主要包括对数据的插入、删除以及更新等。gkd-base的触发器在对事件检测时,直接在相关事件发生的前后调用检测函数截获并分析事件消息,以确定是否对触发器点火。   触发器事件检测机制实现的关键在于对触发事件的存储。触发事件具有时间顺序,因此存储时也必须按照严格的时间顺序进行存储。综合比较各个商用和实验数据库系统的事件表存储机制,选择了starburst的双hash链表存储机制,如图1。

图1 starburst中变迁表的双h
ash结构   

这里,变迁表分为两种类型:new和old,分别对应于触发器行级别操作中的new值和old值。变迁表中存储了事件类型、当前数据表以及事件作用的元组。系统可以通过这个驻留内存的双hash链表实现数据库变迁的快速定位和跟踪处理。   

2.2 触发器的条件判决机制

触发器的条件判决机制是触发器的核心,根据sql99标准的定义,可以将触发器分为前触发、约束判定和后触发三种类型。这三种类型触发器的判决顺序策略如图2。

图 2 三种类型触发器的判决顺序策略图

图 3 rete网络示意图   

触发器的条件评估是影响触发器机制的最关键因素。在数据库环境中,大多数数据修改行为只能影响数据库的一小部分内容,因此没必要每次都

数据库管理系统作为信息系统的核心部件,在信息化时代所充当的角色是其它任何软件所不能替代的。当前数据库应用的一个普遍要求是数据库管理系统能够在一些数据库相关事件发生时触发预先定义的操作,实现信息管理的自动化,因此引进了触发器机制。触发器可以增强引用完整性,加强复杂业务的规则,或者监控数据库的变动,并执行一定的数据操作。   

触发器机制实现主要涉及触发事件的检测以及触发条件的判决等关键技术问题,以及对触发器的编译存储和调用执行等具体操作。   

本文以国产数据库管理系统gkd-base为原型,在兼容oracle 规范的pl/sql引擎基础上,提出一套解决方案,对触发器的关键技术问题进行了探讨,并设计实现了数据库的触发器机制,扩
展了数据库管理系统gkd-base的功能。   

1 gkd-base pl/sql 引擎

gkd-base数据库是一个具有自主知识产权的数据库管理系统,具有兼容sql89标准的sql引擎,能够为用户提供一个统一、有效的数据库访问接口(xapi),实现对数据库的各种操作。为了融合sql语言强大的集合数据处理能力和第三代语言(3gl)灵活的过程处理能力,在gkd-base上已初步实现了兼容oarcle pl/sql v.23的pl/sql引擎。   

gkd-base pl/sql引擎包括编译器、解释器和异常处理三个模块。在编译阶段,根据pl/sql语言兼有过程式语句和sql语句的特点,采取分而治之策略,把过程语句和sql语句分开处理。对于sql语句,编译器首先建立sql语句结点,进行相应的变量绑定和语法检查;检查无误后产生语法树形式的中间代码。对于过程语句,编译器将对语句成分进行语法分析,对声明的变量和数据类型建立相应的符号表,最终产生语法树形式的中间代码。解释器的作用是对编译器生成的中间代码进行解释执行。解释器与编译器对应,具有相对独立的sql语句解释模块和过程语句解释模块。另外,解释器还包括执行状态堆栈的管理、与gkd-base sql引擎的调用接口。异常处理模块主要实现程序运行时的错误检查和报告,并支持用户自定义异常和预定义异常的检查和处理。   

gkd-base pl/sql引擎可以实现对过程式语句、sql语句与游标、存储子程序及包的编译和解释执行。   

2 触发器实现的关键问题

触发器定义了当某些数据库相关事件发生时数据库应采取的动作。触发器可增强引用完整性,加强复杂业务的规则或者监控数据库的变动,其实现主要涉及到触发事件的检测以及触发条件的判决等关键技术问题。   

2.1 触发器的事件检测机制

触发器事件检测机制包括对事件的检测和存储,是实现触发器的关键。触发器检测的事件类型比较简单,基本事件主要包括对数据的插入、删除以及更新等。gkd-base的触发器在对事件检测时,直接在相关事件发生的前后调用检测函数截获并分析事件消息,以确定是否对触发器点火。   触发器事件检测机制实现的关键在于对触发事件的存储。触发事件具有时间顺序,因此存储时也必须按照严格的时间顺序进行存储。综合比较各个商用和实验数据库系统的事件表存储机制,选择了starburst的双hash链表存储机制,如图1。

图1 starburst中变迁表的双h
ash结构   

这里,变迁表分为两种类型:new和old,分别对应于触发器行级别操作中的new值和old值。变迁表中存储了事件类型、当前数据表以及事件作用的元组。系统可以通过这个驻留内存的双hash链表实现数据库变迁的快速定位和跟踪处理。   

2.2 触发器的条件判决机制

触发器的条件判决机制是触发器的核心,根据sql99标准的定义,可以将触发器分为前触发、约束判定和后触发三种类型。这三种类型触发器的判决顺序策略如图2。

图 2 三种类型触发器的判决顺序策略图

图 3 rete网络示意图   

触发器的条件评估是影响触发器机制的最关键因素。在数据库环境中,大多数数据修改行为只能影响数据库的一小部分内容,因此没必要每次都

相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!