高级数据库技术完整性汤娜.ppt

上传人:小飞机 文档编号:6234278 上传时间:2023-10-08 格式:PPT 页数:34 大小:329.99KB
返回 下载 相关 举报
高级数据库技术完整性汤娜.ppt_第1页
第1页 / 共34页
高级数据库技术完整性汤娜.ppt_第2页
第2页 / 共34页
高级数据库技术完整性汤娜.ppt_第3页
第3页 / 共34页
高级数据库技术完整性汤娜.ppt_第4页
第4页 / 共34页
高级数据库技术完整性汤娜.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《高级数据库技术完整性汤娜.ppt》由会员分享,可在线阅读,更多相关《高级数据库技术完整性汤娜.ppt(34页珍藏版)》请在三一办公上搜索。

1、高 级 数 据 库 技 术完 整 性,汤 娜中山大学计算机科学系isstn,系统篇,数据库系统中的数据是由DBMS统一管理和控制的,为了适应数据共享的环境,DBMS必须提供数据保护能力,以保证数据库中数据的安全可靠和正确有效。数据保护数据库完整性数据库恢复技术并发控制数据库安全性,完整性类型完整性约束条件完整性控制参照完整性控制SQL中的完整性约束机制,数据库结构完整性数据库对象能正确地创建、格式化和维护数据语义完整性的基本含义是指数据的正确性、有效性、和相容性。正确性。数据的合法性有效性。数据是否在有效范围内相容性。指表示同一个事实的两个数据应该一致。,数据库结构完整性,结构问题的类型索引(

2、如做数据恢复,没有重做指针)特定的数据类型(如超大对象)数据页的表头备份文件结构问题的管理采用工具由DBMS进行检查sybasemicrosoft Sql Server:DBCC应用程序DB2:CHECK和REPAIR工具Informix:TBCHECK,作用的对象(粒度):关系、元组、列对象状态:动态、静态。,数据语义完整性,1 静态约束1)静态列约束:是对一个列的取值域等的限制。,对数据类型的约束;对数据格式的约束;对取值范围或取值集合的约束;对空值的约束;其它约束;,2)静态元组约束:规定组成一个元组的各个列之间的约束关系。例如:库存关系中出库数量不能大于库存数量。,3)静态关系约束:反

3、映了一个关系中各个元组之间或者若干关系之间存在的联系或约束。,实体完整性约束;参照完整性约束;函数依赖约束;统计依赖约束,2动态约束 1)动态列约束 2)动态元组约束 3)动态关系约束,数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件。,2 动态约束1)动态列约束:修改属性的定义或者属性的值的限制。,修改定义时的约束修改属性值时的约束:新值和旧值之间的约束,2 动态约束1)动态元组约束:修改元组时新旧元组之间的约束关系,如现有工资 原有工资+工龄*1.5,2 动态约束1)动态关系约束:关系新旧状态应该满足的约束关系,如:事务的一致性,原子性,完整性控制,完整性控制机制应具有的

4、三个功能定义功能。提供定义完整性约束条件的机制检查功能。检查用户发出的操作请求是否违背了约束条件。立即执行约束(一条语句执行完成后立即检查)延迟执行约束(整个事务执行完毕后再检查)如果发现用户操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。机制的工作原理定义完整性时定义完整性后,一条完整性规则用五元组(D,O,A,C,P)来描述D(Data)约束作用的数据对象O(Operation)触发完整性检查的数据库操作。即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查。A(Assertion)数据对象要满足的断言或语义规则C(Condition)选择A作用的

5、数据对象值的谓词P(Procedure)违反完整性规则时触发的过程,实体完整性定义主键时定义,只约束定义了主键的表A由DBMS负责检查(对表A做插入和修改操作时)对于违反实体完整性的操作,系统一般采用拒绝执行的方式进行处理,创建关系数据库S(Sno,Sname,Ssex,Sage,Sdept);C(Cno,Cname,Pno);SC(Sno,Cno,Grade)。CREATE TABLE S(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20),Ssex CHAR(1),Sage INT,Sdept CHAR(20),PRIMARY KEY(Sno),CHECK(

6、Sa BETWEEN 15 AND 25)CREATE TABLE C(Cno CHAR(4)NOT NULL,Cname CHAR(30),Pno CHAR(4),PRIMARY KEY(Cno)CREATE TABLE SC(Sno CHAR(5)NOT NULL,Cno CHAR(4)NOT NULL,Grade CHAR(1),PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCE S(Sno)ON DELETE CASCADE,FOREIGN KEY(Cno)REFERENCE C(Cno)ON DELETE No Action),参照完整性定义

7、外键时定义,约束参照表A和被参照表B。特殊的完整性定义由DBMS负责检查(较复杂,四种情况)对于违反参照完整性有时候并不是简单拒绝执行,而是接受该操作,同时执行必要的附加操作对于违反用户自定义完整性的操作,系统一般采用拒绝执行的方式进行处理或根据用户定义的操作来处理,1.两张表互相参照的问题2.表的自参照问题Create table employee(emp_ id int NOT NULL PRIMARY KEY,emp_name varchar(30)NOT NULL,mgr_id int NOT NULL REFERENCES employee(emp_ id)容易造成无法启动的情况,可

8、以在事务提交前禁用参照完整性,(1)在被参照关系中删除元组的问题级联删除(CASCADES)将参照关系中与被参照关系中要删除元组主键值相同的元组一起删除。受限删除(RESTRICTED)只有参照关系中没有元组与被参照关系中要删除元组主键值相同时才执行删除操作,否则拒绝。置空值删除(SET NULL)删除被参照关系中的元组,同时将参照关系中相应元组的外键值置为空,参照完整性控制,(2)在参照关系中插入元组的问题受限插入 只有被参照关系中有元组与参照关系中要插入元组外键值相同时才执行插入操作,否则拒绝。递归插入插入元组外键值在被参照关系中没有元组相同,则首先向被参照关系插入元组,其主键值等于参照关

9、系插入元组的外键值,然后再向参照关系插入元组。,(3)修改关系中主键/外键的问题有的DBMS不允许修改;有的DBMS允许如果修改的是主键,则优级联修改、拒绝修改、置空值修改三种方式如果修改的是外键,则受限插入和递归插入两种策略,总结:1.在四种情况下DBMS要进行检查:对参照表进行插入和修改对被参照表进行删除和修改2.sql server四种情况违反参照完整性的处理方法:,1.在创建和修改基表模式时说明约束(Create语句及Alter语句)2.规则和自定义数据类型 3.触发器(triggle)说明约束一个触发器应包括下面两个功能:(1)指明什么条件下触发器被执行。(2)指明触发器执行什么动作

10、。4.存储过程说明约束5.用断言说明约束(sql server2000不支持),SQL server 2000 提供的完整性约束的表达方式,(1)在创建和修改基表模式时说明约束Create语句(创建新表时创建)数据类型默认值:default(常量/函数)not null,unique(唯一性约束)一起用则表示相应的列为candidate keycheck(检查约束)限制只能对本表中的列做约束只能是用sql结构的一个有限子集constraintAlter语句(对已存在的表创建),CREATE TABLE publishers(pub_id char(4)NOT NULL CONSTRAINT U

11、PKCL_pubind PRIMARY KEY CLUSTERED CHECK(pub_id IN(1389,0736,0877,1622,1756)OR pub_id LIKE 990-90-9),pub_name varchar(40)NULL,city varchar(20)NULL,state char(2)NULL,country varchar(30)NULL DEFAULT(USA),好处:将业务规则直接在数据库中增加;不必是用额外的应用程序逻辑,一旦定义,业务规则会物理的实现,不会被忽略即时执行减少开发小组的编码量减少维护量(采用应用程序逻辑可能代码中多个会有多个使用点),(2

12、)规则和自定义数据类型 如果多个列使用同一类型的约束 形式:CREATE RULE rule AS condition_expressionsp_bindrule rulename=rule,objname=object_name可一般绑定到某一列,或者是用户自己定义的数据类型例子:EXEC sp_bindrule today,employees.hire dateEXEC sp_bindrule rule_ssn,ssn注意多个约束之间的语义冲突emp_type char(8)Default“new”check(emp_type in(“temp”,”fulltime”,”contract”

13、),CREATE RULE rule AS condition_expression规则可以是 WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如 IN、LIKE、BETWEEN)之类的元素。规则不能引用列或其它数据库对象。可以包含不引用数据库对象的内置函数。condition_expression 包含一个变量。每个局部变量的前面都有一个 符号。该表达式引用通过 UPDATE 或 INSERT 语句输入的值。在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是 符号。CREATE RULE range_rule AS range=$1000 AND

14、 range$20000CREATE RULE list_rule AS list IN(1389,0736,0877)CREATE RULE pattern_rule AS value LIKE _ _-%0-9,(3)触发器(triggle)可以用来实施更为复杂的数据检查,可以根据相应操作;可以不但参考定义自身的表中的数据,还可以参考其他表中的数据有如下触发器FOR|AFTER|INSTEAD OF INSERT,UPDATE,deleteFOR update 表中进行更新操作时被激发FOR delete 表中进行删除操作时被激发FOR insert 表中进行插入操作时被激发instead

15、 of 指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。after 在一个触发动作发生之后触发,使用deleted和insert表(在内存中,触发器完成运行后,这些表就不能再访问)deleted表保存受delete和update影响的行的副本insert表保存在insert和update之后添加到触发器中的行的副本例子:(当业务员插入一条新的销售记录时,要修改与其相关的年销售量表)CREATE TRIGGER Update_ytd_salesON salesFOR INSERTASSELECT*FROM insertedUPDATE titlesSET ytd_sales=

16、ytd_sales+qtyFROM insertedWHERE titles.title_id=inserted.title_idGO,(4)存储过程(Procedure)create procedure创建;直接使用存储过程的名字调用或 exec 存储过程名例子:对修改关系中主键/外键的问题create procedure delete_scstudent_num snoas begin delete scwhere sno=student_numdelete studentswhere sno=student_num end,触发器和存储过程的区别1。是否附属于唯一的表触发器附属于唯一的表,而存储过程可访问多个表2。是否事件驱动触发器由事件驱动,而存储过程由显式的指令调用,(5)断言create assertion check 例如:create assertion ass1 check(10=all(select count(cno)from sc group by sno),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号