第十一章_数据库教案完整性_第1页
第十一章_数据库教案完整性_第2页
第十一章_数据库教案完整性_第3页
第十一章_数据库教案完整性_第4页
第十一章_数据库教案完整性_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

数据库完整性,完整性约束条件 完整性控制 Sybase 的完整性,完整性约束条件,数据库完整性: 指数据库的正确性和相容性, DBMS提供维护数据库完整性的功能 完整性约束条件: 根据实际应用需求, 数据库中的数据应满足一些规定的条件, 这些条件称为完整性约束条件 完整性约束条件是现实世界真实的反映 完整性检查: 指DBMS中检查数据是否满足完整性条件的机制,完整性约束条件,完整性约束条件分为: 值的约束和结构约束:,指对数据取值类型、 范围、精度等的规 定, 例如对属性规定 某个值集, 规定属性 取值类型、格式(职 工号第一位为字母, 后面是四位数字),指对数据之间联系的限制, 以关 系库为例:同一关系的不同属性 之间可能满足一定的约束条件( A1A2); 不同关系之间的属性取 值也可能要满足一定的约束条件 (外键取值),完整性约束条件,静态约束和动态约束: 立即执行约束和延迟执行约束:,完整性约束条件,例如: begin transaction update Students set Sno=95012 where Sno=95001; update SC set Sno=95012 where Sno=95001; commit 如是立即执行约束, 事务不能成功执行 如是延迟执行约束, 事务可以成功执行,完整性控制,DBMS完整性控制机制包括: 定义功能: 提供定义完整性约束条件的机制 检查功能: 检查用户提供的请求是否违背了完整性约束条件 如果发现用户的操作违背了完整性约束条件, 则采取一定的动作来保证数据的完整性(一般是取消该事务已产生的影响-恢复),Sybase 的完整性,在Sybase数据库中创建带有数据完整性和参照完整性的表: 把完整性作为表的一部分来说明即完整性约束子句 缺省约束default: 给出列的缺省值 create table Students( sex char(1) default M, . ); 检查约束check constrain: 限定插入列中的值 列级检查约束,Sybase 的完整性,create table publishers( pub_id char(4) not null constraint chk_pubid check(pub_id in (1389, 0736, 0877) or pub_id like 990-90-9) .) 表级检查约束 create table discounts(discounttype varchar(40) not null, lowqty int, hightqty int, , constraint chk_low_hight check(lowqty=hightqty) );,Sybase 的完整性,主键约束primary key constraint: 限定主键的列不可有重复值, 不可有空值 列级主键约束 create table publishers( pub_id char(4) constraint pky_pubid primary key clustered, pub_name varchar(30), .) 表级主键约束 create table sales(stor_id char(4) not null, ord_num varchar(20) not null, date datetime not null, constraint pky_so primary key nonclustered(stor_id,ord_num),Sybase 的完整性,参照约束reference constraint: 列级参照约束 create table publishers( pub_id char(4) constraint pky_pubid primary key, pub_name varchar(30), .) create table title( title_id int not null, title varchar(80) null, pub_id char(4) null constraint ref_pubid reference publishers(pub_id), note varchar(200) null),Sybase 的完整性,表级参照约束 create table publishers( pub_id char(4), pub_name varchar(30), , constraint pky_pubid primary key(pub_id) create table title( title_id int not null, title varchar(80) null, pub_id char(4) null, note varchar(200) null, constraint ref_pubid foreign key(pub_id) reference publishers(pub_id),Sybase 的完整性,唯一约束unique constraint: 列级唯一约束 create table publishers( pub_id char(4) not null constraint unq_pubid unique nonclustered, pub_name varchar(30), ) 表级唯一约束 create table publishers( pub_id char(4) not null pub_name varchar(30), , constraint unq_pubid unique clustered(pub_id),缺省,Sybase 的完整性,删除约束: 只能使用alter table语句, 增加、更新或删除现有表的约束 替换现有约束 原来: create table Students(, sex char(1) default M); 替换: alter table Students replace sex default F,Sybase 的完整性,增加约束 alter table Students add constraint chk_SA check(SA30) 删除已有约束 alter table Students drop constraint chk_SA 相关存储过程 sp_helpconstraint 表名: 报告指定表上的关于约束的信息 sp_column_privileges 表名: 列级权限 sp_table_privileges 表名: 表级权限,Sybase 的完整性,在Sybase中解决完整性的方法还有规则、索引、触发器等 规则 创建一个值的清单或值的集合的规则 CREATE RULE rul_state AS state in (CA,CO,WA) 创建一个值的范围规则 CREATE RULE rul_disc_range AS disco between 0 and 100 创建一个值由编辑掩码确定的规则 CREATE RULE rul_part_num AS part_num like “BF1-91-9_”,Sybase 的完整性,规则 将规则rul_state与“authors.state”列和“publishers.state”列相绑定: EXEC sp_bindrule “rul_state”,”authors.state” EXEC sp_bindrule “rul_state”,” publishers.state” 将规则rul_disc_range与“discounts.discount”列相绑定: EXEC sp_bindrule “rul_disc_range”, “discounts.discount” 查看规则rul_state 的正文和其他有关的信息: EXEC sp_helptext rul_state EXEC sp_help rul_state 删除:DROP RULE rul_state,Sybase 的完整性,唯一索引:限制唯一索引列的取值(唯一) CREATE UNIQUECLUSTERED|NONCLUSTERED INDEX index_name ON table_name(column_name,column_name) 例如:为authors表的au_id列创建一个唯一索引 CREATE UNIQUE INDEX idx_u_auid ON authors(au_id),Sybase 的完整性,触发器 触发器(Trigger)是一种特殊类型的存储过程,通过事件(插入、删除和更新)触发执行。 -是实现复杂完整性约束的有效方法 如:主键被更新或删除外键值时应如何变更? -在应用中的其他作用 维护复制数据、保持导出数据列的当前值(自动更新导出列)、业务规则限制(书价不许一次提价超过10%)、实现定制记录(监控:不许周六、周日插入表,银行必须记录大于10000的事务等。),Sybase 的完整性,Sybase 触发器的形式 CREATE TRIGGER trigger_name ON table_name FOR INSERT,DELETE,UPDATE AS sql 语句和语句组,Sybase 触发器的举例,CREATE TRIGGER Tri_d_publishers ON publishers FOR DELETE AS if rowcount=0/没有行被删除 return /有行被删除:也删除title表中相应的行 DELETE titles FORM titles t,deleted d WHERE t.pub_id=d.pub_id RETURN,约束和触发器,约束用于维护数据库一致性,但最好考虑用约束 来实现同样的目的; 触发器根据操作来定义一致性; 约束易理解,能给DBMS较多机会优化执行; 约束可以阻止任何语句违反一致性; 触发器只能由特定语句来激活,比较灵活; 触发器的其他用途(如维护复制数据库等),CREATE TRIGGER init_count BEFORE INSERT ON students /*event*/ Declare count integer; begin count:=0; /*action*/ end CREATE TRIGGER incr_count AFTER INSERT ON Students when(new.age18) /* condition “new” is just-inserted tuple*/ FOR EACH ROW /* row-level trigger*/ begin count:=count+1 end,Trigger:Example:,Triggers:Example(SQL:1999 ) CREATE TRIGGER YoungSailorUpdate AFTER INSERT ON SAILORS REFERENCING NEW TABLE NewSa

温馨提示

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

评论

0/150

提交评论