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

下载本文档

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

文档简介

数据库教案完整性第一页,共二十七页,编辑于2023年,星期六完整性约束条件数据库完整性:指数据库的正确性和相容性,DBMS提供维护数据库完整性的功能完整性约束条件:根据实际应用需求,数据库中的数据应满足一些规定的条件,这些条件称为完整性约束条件完整性约束条件是现实世界真实的反映完整性检查:指DBMS中检查数据是否满足完整性条件的机制第二页,共二十七页,编辑于2023年,星期六完整性约束条件完整性约束条件分为:值的约束和结构约束:指对数据取值类型、范围、精度等的规定,例如对属性规定某个值集,规定属性取值类型、格式(职工号第一位为字母,

后面是四位数字)指对数据之间联系的限制,以关系库为例:同一关系的不同属性之间可能满足一定的约束条件(A1A2);不同关系之间的属性取值也可能要满足一定的约束条件(外键取值)第三页,共二十七页,编辑于2023年,星期六完整性约束条件静态约束和动态约束:立即执行约束和延迟执行约束:指数据库每一确定状态的数据应满足的约束条件,例如外键约束等指DB从一种状态转变为另外一种状态时,新值和旧值之间应满足的约束条件,例如工资调整时,要求新工资不低于旧工资在执行用户事务时,对事务中某一更新语句执行完后,马上对此数据检查它的完整性事务执行结束后,才检查所涉及的数据是否满足完整性要求,结果正确事务才可提交第四页,共二十七页,编辑于2023年,星期六完整性约束条件例如:begintransactionupdateStudentssetSno=‘95012’whereSno=‘95001’;updateSCsetSno=‘95012’whereSno=‘95001’;commit如是立即执行约束,事务不能成功执行如是延迟执行约束,事务可以成功执行第五页,共二十七页,编辑于2023年,星期六完整性控制DBMS完整性控制机制包括:定义功能:提供定义完整性约束条件的机制检查功能:检查用户提供的请求是否违背了完整性约束条件如果发现用户的操作违背了完整性约束条件,则采取一定的动作来保证数据的完整性(一般是取消该事务已产生的影响--恢复)第六页,共二十七页,编辑于2023年,星期六Sybase的完整性在Sybase数据库中创建带有数据完整性和参照完整性的表:把完整性作为表的一部分来说明即完整性约束子句缺省约束default:给出列的缺省值

createtableStudents(…sexchar(1)default‘M’,

...);检查约束checkconstrain:限定插入列中的值列级检查约束第七页,共二十七页,编辑于2023年,星期六Sybase的完整性

createtablepublishers(pub_idchar(4)notnull

constraintchk_pubidcheck(pub_idin(‘1389’,‘0736’,‘0877’)orpub_idlike‘99[0-9][0-9]’)….)

表级检查约束

createtablediscounts(discounttypevarchar(40)notnull,lowqtyint,hightqtyint,…,

constraintchk_low_hightcheck(lowqty<=hightqty));第八页,共二十七页,编辑于2023年,星期六Sybase的完整性主键约束primarykeyconstraint:限定主键的列不可有重复值,不可有空值列级主键约束

createtablepublishers(pub_idchar(4)

constraintpky_pubidprimarykeyclustered,pub_namevarchar(30),….)

表级主键约束

createtablesales(stor_idchar(4)notnull,ord_numvarchar(20)notnull,datedatetimenotnull,constraintpky_soprimarykeynonclustered(stor_id,ord_num))第九页,共二十七页,编辑于2023年,星期六Sybase的完整性参照约束referenceconstraint:列级参照约束

createtablepublishers(pub_idchar(4)

constraintpky_pubidprimarykey,pub_namevarchar(30),….)

createtabletitle(title_idintnotnull,titlevarchar(80)null,pub_idchar(4)null

constraintref_pubidreferencepublishers(pub_id),notevarchar(200)null)第十页,共二十七页,编辑于2023年,星期六Sybase的完整性表级参照约束

createtablepublishers(pub_idchar(4),pub_namevarchar(30),…,

constraintpky_pubidprimarykey(pub_id))

createtabletitle(title_idintnotnull,titlevarchar(80)null,pub_idchar(4)null,notevarchar(200)null,

constraintref_pubidforeignkey(pub_id)

referencepublishers(pub_id))第十一页,共二十七页,编辑于2023年,星期六Sybase的完整性唯一约束uniqueconstraint:列级唯一约束

createtablepublishers(pub_idchar(4)notnull

constraintunq_pubiduniquenonclustered,pub_namevarchar(30),…)

表级唯一约束createtablepublishers(pub_idchar(4)notnullpub_namevarchar(30),…,

constraintunq_pubiduniqueclustered(pub_id))缺省第十二页,共二十七页,编辑于2023年,星期六Sybase的完整性删除约束:只能使用altertable语句,增加、更新或删除现有表的约束替换现有约束原来:createtableStudents(…,sexchar(1)default‘M’);替换:altertableStudentsreplacesexdefault‘F’第十三页,共二十七页,编辑于2023年,星期六Sybase的完整性增加约束

altertableStudentsaddconstraintchk_SAcheck(SA<30)删除已有约束

altertableStudentsdropconstraintchk_SA相关存储过程

sp_helpconstraint表名:报告指定表上的关于约束的信息sp_column_privileges表名:列级权限sp_table_privileges表名:表级权限第十四页,共二十七页,编辑于2023年,星期六Sybase的完整性在Sybase中解决完整性的方法还有规则、索引、触发器等规则创建一个值的清单或值的集合的规则CREATERULErul_stateAS@statein(‘CA’,’CO’,’WA’)创建一个值的范围规则CREATERULErul_disc_rangeAS@discobetween0and100创建一个值由编辑掩码确定的规则CREATERULErul_part_numAS@part_numlike“[BF][1-9][1-9]_”第十五页,共二十七页,编辑于2023年,星期六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_helptextrul_stateEXEC

sp_helprul_state删除:DROPRULErul_state第十六页,共二十七页,编辑于2023年,星期六Sybase的完整性唯一索引:限制唯一索引列的取值(唯一)CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_nameONtable_name(column_name[,column_name…])例如:为authors表的au_id列创建一个唯一索引CREATEUNIQUEINDEXidx_u_auidONauthors(au_id)第十七页,共二十七页,编辑于2023年,星期六Sybase的完整性触发器触发器(Trigger)是一种特殊类型的存储过程,通过事件(插入、删除和更新)触发执行。-是实现复杂完整性约束的有效方法如:主键被更新或删除外键值时应如何变更?-在应用中的其他作用维护复制数据、保持导出数据列的当前值(自动更新导出列)、业务规则限制(书价不许一次提价超过10%)、实现定制记录(监控:不许周六、周日插入表,银行必须记录大于10000的事务等。)第十八页,共二十七页,编辑于2023年,星期六Sybase的完整性Sybase触发器的形式CREATETRIGGERtrigger_nameONtable_nameFOR{INSERT,DELETE,UPDATE}AS sql语句和语句组第十九页,共二十七页,编辑于2023年,星期六Sybase触发器的举例CREATETRIGGERTri_d_publishersONpublishersFORDELETEASif@@rowcount=0//没有行被删除

return//有行被删除:也删除title表中相应的行DELETEtitlesFORMtitlest,deletedd WHEREt.pub_id=d.pub_idRETURN第二十页,共二十七页,编辑于2023年,星期六约束和触发器约束用于维护数据库一致性,但最好考虑用约束来实现同样的目的;触发器根据操作来定义一致性;约束易理解,能给DBMS较多机会优化执行;约束可以阻止任何语句违反一致性;触发器只能由特定语句来激活,比较灵活;触发器的其他用途(如维护复制数据库等)第二十一页,共二十七页,编辑于2023年,星期六第二十二页,共二十七页,编辑于2023年,星期六第二十三页,共二十七页,编辑于2023年,星期六第二十四页,共二十七页,编辑于2023年,星期六第二十五页,共二十七页,编辑于2023年,星期六CREATETRIGGERinit_countBEFOREINSERTONstudents/*event*/ Declare countinteger; begin count:=0;/*ac

温馨提示

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

评论

0/150

提交评论