高级数据库技术完整性汤娜.ppt_第1页
高级数据库技术完整性汤娜.ppt_第2页
高级数据库技术完整性汤娜.ppt_第3页
高级数据库技术完整性汤娜.ppt_第4页
高级数据库技术完整性汤娜.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高 级 数 据 库 技 术 完 整 性,汤 娜 中山大学计算机科学系 ,系统篇,数据库系统中的数据是由DBMS统一管理和控制的,为了适应数据共享的环境,DBMS必须提供数据保护能力,以保证数据库中数据的安全可靠和正确有效。 数据保护 数据库完整性 数据库恢复技术 并发控制 数据库安全性,完整性类型 完整性约束条件 完整性控制 参照完整性控制 SQL中的完整性约束机制,数据库结构完整性 数据库对象能正确地创建、格式化和维护 数据语义完整性的基本含义是指数据的正确性、有效性、和相容性。 正确性。数据的合法性 有效性。数据是否在有效范围内 相容性。指表示同一个事实的两个数据应该一致。,数据库结构完整性,结构问题的类型 索引(如做数据恢复,没有重做指针) 特定的数据类型(如超大对象) 数据页的表头 备份文件 结构问题的管理 采用工具由DBMS进行检查 sybasemicrosoft Sql Server:DBCC应用程序 DB2:CHECK和REPAIR工具 Informix:TBCHECK,作用的对象(粒度):关系、元组、列 对象状态:动态、静态。,数据语义完整性,1 静态约束 1)静态列约束:是对一个列的取值域等的限制。,对数据类型的约束 ; 对数据格式的约束 ; 对取值范围或取值集合的约束; 对空值的约束 ; 其它约束 ;,2)静态元组约束:规定组成一个元组的各个列之间的约束关系。 例如:库存关系中出库数量不能大于库存数量。,3)静态关系约束:反映了一个关系中各个元组之间或者若干关系之间存在的联系或约束。,实体完整性约束; 参照完整性约束; 函数依赖约束; 统计依赖约束,2动态约束 1)动态列约束 2)动态元组约束 3)动态关系约束,数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件。,2 动态约束 1)动态列约束:修改属性的定义或者属性的值的限制。,修改定义时的约束 修改属性值时的约束:新值和旧值之间的约束,2 动态约束 1)动态元组约束:修改元组时新旧元组之间的约束关系,如现有工资 原有工资+工龄*1.5,2 动态约束 1)动态关系约束:关系新旧状态应该满足的约束关系,如:事务的一致性,原子性,完整性控制,完整性控制机制应具有的三个功能 定义功能。提供定义完整性约束条件的机制 检查功能。检查用户发出的操作请求是否违背了约束条件。 立即执行约束(一条语句执行完成后立即检查) 延迟执行约束(整个事务执行完毕后再检查) 如果发现用户操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 机制的工作原理 定义完整性时 定义完整性后,一条完整性规则用五元组(D,O,A,C,P)来描述 D(Data) 约束作用的数据对象 O(Operation) 触发完整性检查的数据库操作。即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查。 A(Assertion) 数据对象要满足的断言或语义规则 C(Condition) 选择A作用的数据对象值的谓词 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(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),参照完整性 定义外键时定义,约束参照表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 ) 容易造成无法启动的情况,可以在事务提交前禁用参照完整性,(1)在被参照关系中删除元组的问题 级联删除(CASCADES) 将参照关系中与被参照关系中要删除元组主键值相同的元组一起删除。 受限删除 (RESTRICTED)只有参照关系中没有元组与被参照关系中要删除元组主键值相同时才执行删除操作,否则拒绝。 置空值删除(SET NULL)删除被参照关系中的元组,同时将参照关系中相应元组的外键值置为空,参照完整性控制,(2)在参照关系中插入元组的问题 受限插入 只有被参照关系中有元组与参照关系中要插入元组外键值相同时才执行插入操作,否则拒绝。 递归插入插入元组外键值在被参照关系中没有元组相同,则首先向被参照关系插入元组,其主键值等于参照关系插入元组的外键值,然后再向参照关系插入元组。,(3)修改关系中主键/外键的问题 有的DBMS不允许修改; 有的DBMS允许 如果修改的是主键,则优级联修改、拒绝修改、置空值修改三种方式 如果修改的是外键,则受限插入和递归插入两种策略,总结: 1.在四种情况下DBMS要进行检查: 对参照表进行插入和修改 对被参照表进行删除和修改 2.sql server四种情况违反参照完整性的处理方法:,1.在创建和修改基表模式时说明约束(Create语句及Alter语句) 2.规则和自定义数据类型 3.触发器(triggle)说明约束 一个触发器应包括下面两个功能: (1)指明什么条件下触发器被执行。 (2)指明触发器执行什么动作。 4.存储过程说明约束 5.用断言说明约束(sql server2000不支持),SQL server 2000 提供的完整性约束的表达方式,(1)在创建和修改基表模式时说明约束 Create语句(创建新表时创建) 数据类型 默认值:default(常量/函数) not null, unique(唯一性约束) 一起用则表示相应的列为candidate key check (检查约束) 限制 只能对本表中的列做约束 只能是用sql结构的一个有限子集 constraint Alter语句(对已存在的表创建),CREATE TABLE publishers ( pub_id char(4) NOT NULL CONSTRAINT UPKCL_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)规则和自定义数据类型 如果多个列使用同一类型的约束 形式: CREATE RULE rule AS condition_expression sp_bindrule rulename = rule , objname = object_name 可一般绑定到某一列,或者是用户自己定义的数据类型 例子:EXEC sp_bindrule today, employees.hire date EXEC sp_bindrule rule_ssn, ssn 注意多个约束之间的语义冲突 emp_type char(8) Default “new” check (emp_type in(“temp”,”fulltime”,”contract”),CREATE RULE rule AS condition_expression 规则可以是 WHERE 子句中任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和谓词(如 IN、LIKE、 BETWEEN)之类的元素。规则不能引用列或其它数据库对象。可以包含不引用数据库对象的内置函数。 condition_expression 包含一个变量。每个局部变量的前面都有一个 符号。该表达式引用通过 UPDATE 或 INSERT 语句输入的值。在创建规则时,可以使用任何名称或符号表示值,但第一个字符必须是 符号。 CREATE RULE range_rule AS range = $1000 AND range $20000 CREATE 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 ,delete FOR update 表中进行更新操作时被激发 FOR delete 表中进行删除操作时被激发 FOR insert 表中进行插入操作时被激发 instead of 指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。 after 在一个触发动作发生之后触发,使用deleted和insert表(在内存中,触发器完成运行后,这些表就不能再访问) deleted表保存受delete和update影响的行的副本 insert表保存在insert和update之后添加到触发器中的行的副本 例子: (当业务员插入一条新的销售记录时,要修改与其相关的年销售量表) CREATE TRIGGER Update_ytd_sales ON sales FOR INSERT AS SELECT * FROM inserted UPDATE titles SET ytd_sales= ytd_sales+qty FROM inserted WHERE titles.title_id= inserted.title_id GO,(4)存储过程(Procedure) create procedure创建; 直接使用存储过程的名字调用或 exec 存储过程名 例子:对修改关系中主键/外键的问题 create procedure delete_sc student_num sno as begin dele

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论