第9章 触发子和主动数据库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
在20世纪80年代初,出现了主动数据库系统 20世纪80年代初, 世纪80年代初 这样的名词。 20世纪80年代中后期 世纪80年代中后期, 这样的名词。到20世纪80年代中后期,主动数据 库系统成为公认的数据库重要研究方向之一。 库系统成为公认的数据库重要研究方向之一。 主动数据库系统一词与关系数据库系统、 主动数据库系统一词与关系数据库系统、对象数 据库系统等有些差别。 据库系统等有些差别。后者是以不同数据模型为特征 的数据库系统,标志数据库的不同发展阶段。 的数据库系统,标志数据库的不同发展阶段。 主动数据库仅是数据库系统的一种功能, 主动数据库仅是数据库系统的一种功能,关系数 据库系统可以增加此项功能, 据库系统可以增加此项功能,对象数据库系统以及其 他类型的数据库系统都可以增加此项功能。 他类型的数据库系统都可以增加此项功能。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
引用名〉 的定义中, 在 〈 引用名 〉 的定义中 , 前两行定义单个 元组的新、旧值的引用名,用于按行监控; 元组的新、旧值的引用名,用于按行监控;后 两行定义元组集( 的新、旧值的引用名, 两行定义元组集(表)的新、旧值的引用名, 用于按语句监控。 用于按语句监控。设新的元组值的引用名定义 为N,则可写成 NEW[ROW] REFERENCING NEW[ROW]AS N 设旧的元组集的引用名定义为OT OT, 设旧的元组集的引用名定义为 OT , 则可写 成 REFERENCING OLD TABLE AS OT
第9章 触发子和主动数据库
9.1 主动数据库系统引论
传统的数据库系统只能按照用户或应用程 序的要求,对数据库进行操作, 序的要求,对数据库进行操作,而不能根据发 生的事件或数据库的状态主动进行相应的处理, 生的事件或数据库的状态主动进行相应的处理, 这样的数据库系统是被动的。 这样的数据库系统是被动的。 有些应用不满足于数据库系统的这种“ 有些应用不满足于数据库系统的这种“不叫 不动”式的被动服务, 不动”式的被动服务,希望数据库系统能够主 动为用户提供服务。 动为用户提供服务。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
早在主动数据库系统一词出现之前, 早在主动数据库系统一词出现之前,就有主动数 据库技术的萌芽。在网状数据库的DBTG DBTG语言标准 据库技术的萌芽。在网状数据库的DBTG语言标准 就定义了一种ON子句,其格式为: ON子句 中,就定义了一种ON子句,其格式为: ON〈命令表CALL 过程〉 CALL〈 ON〈命令表CALL〈过程〉 命令表〉表示一种或多种数据库操作命令, 〈命令表〉表示一种或多种数据库操作命令,如I NSERT,REMOVE等。在执行到〈命令表〉 NSERT,REMOVE等 在执行到〈命令表〉 中所列的数据库命令时, 中所列的数据库命令时,数据库系统就自动调用一个 相应的处理过程。 相应的处理过程。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
触发子的事件既然是数据库更新操作, 触发子的事件既然是数据库更新操作 , 这些操作 的执行势必引起数据库中某些值的改变, 的执行势必引起数据库中某些值的改变 , 即由旧值变 为 新 值 , 这 些 新 、 旧 值 称 为 过 渡 值 ( transit values) values ) 。 在触发子的条件和动作中可能引用这些过 渡值。过渡值是单个元组或一般不大的元组集( 渡值 。 过渡值是单个元组或一般不大的元组集( 表 ) , 仅仅在执行规则时可能用到,一般存于内存中。 仅仅在执行规则时可能用到 , 一般存于内存中 。 为了 访问它,触发子须为它定义一个引用名(即变量名) 访问它 ,触发子须为它定义一个引用名 ( 即变量名 ) 。 在触发子定义中,有个可选的REFERENCING子句, REFERENCING子句 在触发子定义中,有个可选的REFERENCING子句,为过 渡值定义引用名。 渡值定义引用名。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
SQL更新操作的对象一般是个元组集, SQL更新操作的对象一般是个元组集,对这些操 更新操作的对象一般是个元组集 作的监控就存在一个监控粒度问题。 作的监控就存在一个监控粒度问题。可供选择的监控 粒度有两种:或是对逐个元组( 监控, 粒度有两种:或是对逐个元组(行)监控,或是以语 句为单位进行监控。 句为单位进行监控。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
下面通过SQL∶1999的触发子定义, 下面通过SQL∶1999的触发子定义,说明主动 SQL 的触发子定义 数据库规则的语法和语义。 数据库规则的语法和语义。 触发子可定义如下: 触发子可定义如下:
TRIGGER〈触发子名〉 〈触发子〉∷=CREATE TRIGGER〈触发子名〉 触发子〉 {BEFORE|AFTER}〈触发事件〉ON〈表名〉 {BEFORE|AFTER}〈触发事件〉ON〈表名〉 [REFERENCING〈引用名〉 [REFERENCING〈引用名〉] FOREACH{ROW|STATEMENT} WHEN(〈条件) 动作〉 WHEN(〈条件)〈动作〉 触发事件〉 〈触发事件〉∷=INSERT|DELETE|UPDATE[OF 属性表〉 〈属性表〉] 引用名〉 =OLD[ROW][AS]〈旧元组名〉 〈引用名〉∷=OLD[ROW][AS]〈旧元组名〉| NEW[ROW][AS]〈新元组名〉 NEW[ROW][AS]〈新元组名〉| OLDTABLE[AS]〈旧表名〉 OLDTABLE[AS]〈旧表名〉 | NEWTABLE[AS]〈新表名〉 NEWTABLE[AS]〈新表名〉
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
在主动数据库系统中,像上述的处理,用户只要提 在主动数据库系统中,像上述的处理, 出要求, DBMS执行 完全可以避免上述缺点。 执行, 出要求,由DBMS执行,完全可以避免上述缺点。 主动数据库系统对DBMS DBMS的基本要求是能处理下 主动数据库系统对DBMS的基本要求是能处理下 列形式的规则: 列形式的规则: WHENEVER〈事件〉 WHENEVER〈事件〉 IF〈条件〉THEN〈动作〉 IF〈条件〉THEN〈动作〉 这种规则称为主动数据库规则( 这种规则称为主动数据库规则(active database rules),又称ECA规则(取事件、条件、 ECA规则 rules),又称ECA规则(取事件、条件、动作英文名的 首字母),也称触发子(triggers)。 ),也称触发子 首字母),也称触发子(triggers)。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
9.2 规则的表示 ECA规则是由传统的产生式规则演 ECA规则是由传统的产生式规则演 变而来的。 变而来的。产生式规则在人工智能中用 得很普遍,其基本格式可表达为: 得很普遍,其基本格式可表达为: IF〈条件〉THEN〈动作〉 〈条件〉THEN〈动作〉
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
从触发子定义可知, 从触发子定义可知,在事件发生前或发生 如果条件为真,则规则处于触发状态, 后,如果条件为真,则规则处于触发状态,它 的动作随时可以执行。 的动作随时可以执行。但一个表可能有多个规 则被触发,这就存在一个执行的次序问题。 则被触发,这就存在一个执行的次序问题。常 用的方法是给每个规则( 用的方法是给每个规则(包括行级规则及语句 级规则)一个优先级,按优先级高低依次执行。 级规则)一个优先级,按优先级高低依次执行。 对于同一优先级的规则, 对于同一优先级的规则,按照系统所定的规则 排序,如以规则定义的先后为序。总之, 排序,如以规则定义的先后为序。总之,触发 了的规则的执行要有明确的次序, 了的规则的执行要有明确的次序,这个次序必 须是全序,不能是偏序。否则, 须是全序,不能是偏序。否则,执行次序将是 不确定和不可重复的。 不确定和不可重复的。
有哪些操作会影响到本例的引用完整性约束。 有哪些操作会影响到本例的引用完整性约束。 不难看 共有下面6种操作: 出,共有下面6种操作: SC表的INSERT操作 表的INSERT操作。 ●SC表的INSERT操作。 COURSE表的DELETE操作 表的DELETE操作。 ●COURSE表的DELETE操作。 ●STUDENT表的DELETE操作。 STUDENT表的DELETE操作。 表的DELETE操作 SC表的UPDATE(SNO,CNO)操作。 表的UPDATE ●SC表的UPDATE(SNO,CNO)操作。 COURSE表的UPDATE(CNO)操作。 表的UPDATE ●COURSE表的UPDATE(CNO)操作。 STUDENT表的UPDATE(SNO)操作。 表的UPDATE ●STUDENT表的UPDATE(SNO)操作。 对上述6种操作分别定义6条规则, 对上述6种操作分别定义6条规则,以实现所定义的 引用完整性约束。 引用完整性约束。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
在主动数据库中, (2)在主动数据库中,对触发规则的时间往 往是有要求的。例如, 往是有要求的。例如,有些规则要求在事件前 触发,有些则要求在事件后触发。 ECA规 触发,有些则要求在事件后触发。在ECA规 则中,可以明确地表示此要求; CA规则不 则中,可以明确地表示此要求;而CA规则不 提供这种方便。 提供这种方便。
制作:倪巍伟 东系统缺少主动数据库功能, 由于传统数据库系统缺少主动数据库功能,有些 可由主动数据库提供的功能不得不由应用程序来实现。 可由主动数据库提供的功能不得不由应用程序来实现。 在每次更新数据库时, 在每次更新数据库时,应用程序检查数据库更新前后 的状态,若有违反完整性约束或需主动干预等情况, 的状态,若有违反完整性约束或需主动干预等情况, 应用程序对数据库进行相应的操作。 应用程序对数据库进行相应的操作。 这样做不但增加了应用程序设计者的负担, 这样做不但增加了应用程序设计者的负担,而且 还有下列缺点: 还有下列缺点: (1)若要修改完整性约束或触发条件,则需修改应 若要修改完整性约束或触发条件, 用程序。 用程序。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
早期的关系数据库管理系统System R中 早期的关系数据库管理系统System R中,曾有人建 议增加触发子系统( subsystem)。 )。该子系统 议增加触发子系统(trigger subsystem)。该子系统 在满足一定条件时,触发一定的动作, 在满足一定条件时,触发一定的动作,主动完成必要的 处理,实际上就是现在所称的主动数据库子系统。 处理,实际上就是现在所称的主动数据库子系统。 在被动数据库系统中, 在被动数据库系统中,也有与主动数据库类似的功 例如, 能。例如,自动维护简单的域完整性约束和实体完整性 约束等。 约束等。这些功能都是以系统内部逻辑控制的形式实现 用户不得重新定义、修改或扩充。 的,用户不得重新定义、修改或扩充。具有这类功能的 数据库系统仍属被动数据库系统。 数据库系统仍属被动数据库系统。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
【例9-1】引用完整性约束的实现。 以例3-1定义的STUDENT,COURSE,SC 三个表为例,其中SC表中定义了两个外键SNO和C NO及其完整性约束,试写出实现此引用完整性约束的 规则。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
这种规则可称为CA规则。在主动数据库系 这种规则可称为CA规则。 CA规则 统中,也有少数系统直接采用CA规则。 CA规则 统中,也有少数系统直接采用CA规则。其语 义为:当数据库到达某一状态, 义为:当数据库到达某一状态,使规则中的 条件〉满足时,则该规则被触发。但是CA 〈条件〉满足时,则该规则被触发。但是CA 规则用于主动数据库系统有下面两个缺点。 规则用于主动数据库系统有下面两个缺点。 )CA规则只表示数据库到达的状态 规则只表示数据库到达的状态, (1)CA规则只表示数据库到达的状态,而 不表示如何导致这种状态。 不表示如何导致这种状态。
制作:倪巍伟 东南大学计算机科学与工程学院数据库课程组
(2)由应用程序实现完整性约束检查和其他处理, 由应用程序实现完整性约束检查和其他处理, 正确性难以保证,不利于数据库系统的可靠运行。 正确性难以保证,不利于数据库系统的可靠运行。 增加了数据库和应用程序间的通信, (3)增加了数据库和应用程序间的通信,影响数据 库的性能。 库的性能。
相关文档
最新文档