第五章关系完整性-终稿_第1页
第五章关系完整性-终稿_第2页
第五章关系完整性-终稿_第3页
第五章关系完整性-终稿_第4页
第五章关系完整性-终稿_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

关系完整性的分类实体完整性参照完整性用户定义完整性1实体完整性的定义实体完整性:保证关系中的每一个元组都是可唯一识别的。“可唯一识别”和“一定有候选码”是否等价?2实体完整性NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004刘晨男19IS95001刘勇男17MA刘勇男17MA不可插入,不满足实体完整性要求不可插入,不满足实体完整性要求3定义实体完整性

创建表时用PRIMARYKEY定义,单属性构成的码有两种说明方法:定义为列级约束条件。定义为表级约束条件。

由多个属性构成的码只有一种说明方法:定义为表级约束条件。4(1)在列级定义主码

例[1]

将Student表中的Sno属性定义为码CREATE

TABLE

Student

(noCHAR(9)

PRIMARYKEY,

nameCHAR(20)NOTNULL,sexCHAR(2),ageSMALLINT,deptCHAR(20));定义实体完整性5(2)在表级定义主码

CREATE

TABLE

Student(noCHAR(9)NOTNULL,nameCHAR(20)NOTNULL,sexCHAR(2),ageSMALLINT,deptCHAR(20),

PRIMARYKEY(no));

定义实体完整性6定义实体完整性例:将Student表中的Sno属性定义为码CREATE

TABLE

Student

(noCHAR(9)unique,notnull,

nameCHAR(20)NOTNULL,sexCHAR(2),ageSMALLINT,deptCHAR(20));执行:insertintostudentvalues(‘’,‘张’,20,‘CS’)不提示错误Notnull,unique和primarykey是否可以互换?若不可以,区别是什么?7定义实体完整性[例]:CREATE

TABLE

Student

(noCHAR(9)primarykey,

nameCHAR(20)NOTNULL,sexCHAR(2),ageSMALLINT,deptCHAR(20));执行:insertintostudentvalues('','张',20,'CS')则提示错误8例[2]将SC表中的Sno,Cno属性组定义为码

CREATETABLESC(noCHAR(9)NOTNULL,cnoCHAR(4)NOTNULL,GradeSMALLINT,

PRIMARYKEY(Sno,Cno)));/*只能在表级定义主码*/定义实体完整性9实体完整性的违约处理

1.检查主码值是否唯一,如果不唯一则拒绝执行。2.检查主码的各个属性是否为空,只要有一个为空就拒绝执行。10实体完整性的违约处理

(1)单属性作主码,拒绝执行NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004刘晨男19IS95001张立男17MA张立男17MA不可插入,不满足实体完整性要求不可插入,不满足实体完整性要求11noCnoGrade950012889500229295001192Sc9500588(2)多属性作主码实体完整性的违约处理

12noCnoGrade950012889500229295001192Sc95001288(2)多属性作主码实体完整性的违约处理

13参照完整性

如果属性(或属性组)F是基本关系R的外码,它与基本关系S的主码相对应,则对于R中每个元组在F上的值必须为空值(F的每一个属性值都为空)或者等于S中某个元组的主码值。cnocnamecredit1数据库22操作系统33数据结构5noCnograde12851385SCC390null5NoNameSexAgedept95001李勇男20CS95002刘晨女19ISstudent14studentNoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19ISnoCnoGrade950012889500229295001192Sc950052889500438815定义参照完整性

在创建表时用FOREIGNKEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码16例:定义SC中的参照完整性CREATETABLESC(noCHAR(9)NOTNULL,CnoCHAR(4)NOTNULL,GradeSMALLINT,

PRIMARYKEY(no,Cno),/*在表级定义实体完整性*/

FOREIGNKEY(no)REFERENCESStudent(no),

/*在表级定义参照完整性*/

FOREIGNKEY(Cno)REFERENCESCourse(Cno)

/*在表级定义参照完整性,可以定义多次*/定义参照完整性17参照完整性的违约处理1.

拒绝(NOACTION)执行(默认策略)。2.级联(CASCADE)操作。3.设置为空值(SET-NULL)。18(1)拒绝插入NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003刘云女18CSnoCnoGrade950012889500229295004192sc

在SC表中插入学号为95004的学生选课信息拒绝插入,不存在学号为95004的学生student拒绝(NOACTION)执行19(2)拒绝修改NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003刘云女18CSnoCnoGrade950012889500229295003192sc

将95003的学号改为95004修改失败student20(3)拒绝删除NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003刘云女18CSnoCnoGrade950012889500229295003192sc

删除student表中学号为95003的记录删除失败student21级联策略NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003刘云女18CSnoCnoGrade950012889500229295003192sc

删除student表中的学号为95003的记录student插入成功(1)级联插入22(2)级联修改策略NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003刘云女18CSnoCnoGrade950012889500229295003192sc

将95003的学号,改为95004student修改成功95004刘云女18CS9500419223(3)级联删除策略NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003杨云女18CSnoCnoGrade950012889500229295003192sc

删除student表中学号为95003的学生信息student删除成功24置空策略(SET-NULL)

删除被参照关系中的某一元组或修改某一元组的主码值时,参照关系中外码值等于该主码值的元组在该外码上的值将被置空。

修改时置空删除时置空25(1)修改时置空NoNameSexAgedept95001李勇男20CS95002张晨女19IS95003刘云女18CSnoCnoGrade950012889500229295003192sc

将95003的学号改为9500495004

刘云女18CSNULL192student空表示不知道或不确定26(2)删除时置空NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003杨云女18CSnoCnoGrade950012889500229295003192sc

删除学号为95003的学生信息NULL192student27用户定义完整性(域完整性)

针对某一具体关系数据库用户规定的约束条件,如果操作不满足约束条件,则拒绝执行。

如:学生的成绩不能为负,出生的年龄不能超过20岁28studentNoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19IS95005张明男22CS不可插入记录,该生年龄太大了(1)拒绝插入29(2)拒绝修改NoNameSexAgedept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19将95004学生的年龄修改为25IS2519不可修改30完整性约束命名子句1完整性约束命名子句constraint<完整性约束条件>[primarykey短语]|foreignkey短语|check短语]31完整性约束命名子句1完整性约束命名子句例1:建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。Createtablestudent12(nonumeric(6)constraintc1check(nobetween90000and99999),namechar(20)constraintc2notnull,agenumeric(3)constraintc3check(age<30),sexchar(2)constraintc4check(sexIN('男','女')),ConstraintStudentKeyprimarykey(no))

32完整性约束命名子句1完整性约束命名子句例:建立教师表teacher,要求每个教师的应发工资不低于3000元。应发工资实际上就是实发工资列sal与扣除项deduct之和。(1)createtabledept(deptnonumeric(2)primarykey,deptnamechar(20))(2)createtableteacher(enonumeric(4)primarykey,enamechar(10),jobchar(8),salnumeric(7,2),deductnumeric(7,2),deptnonumeric(2),constraintempfkeyforeignkey(deptno)referencesdept(deptno),constraintc10check(sal+deduct>=3000))33完整性约束命名子句2修改表中的完整性限制用altertable修改表中的完整性限制例:去掉student12表中对性别的限制Altertablestudent12dropconstraintc434完整性约束命名子句2修改表中的完整性限制例:修改表student中的约束条件,要求学号改为900000_999999之间,年龄由小于30改为小于40.例:(1)altertableStudent12dropconstraintc1(2)altertablestudent12addconstraintc1check(nobetween900000and999999)35小结(1)关系完整性的定义,相关概念(2)关系完整性的分类(3)各类完整性的定义

primarykey,foreignkey,references,constraint(4)各类完整性的违约处理策略:拒绝执行,级联策略,置空策略36作业1、假设有下面的关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;

部门(部门号,名称,经理名,电话),其中部门号为主码;用SQL语言定义这个两个关系模式,要求在模式中完成以下完整性约束条件的定义:(1)定义每个模式的主码;(2)定义参照完整性;(3)定义职工年龄不得超过60岁。37触发器定义:用户定义在关系表上的一类由事件驱动的特殊过程。格式:Createtrigger<触发器名>ON<表名>{For|after|insteadof}{delete|insert|update}As动作体38例:createtriggerstum1onstudent

afterinsert

as

print‘欢迎新同学'

insertintostudentvalues('16','刘','男','28','ma')39触发器名:必须符合标示符的命名规则表名:是在其上执行触发器的表,有时也称触发器表。After:指定触发器只有在触发SQL语句中指定的所有操作都已成功执行后才激发。如果指定FOr关键字,则AFTER是默认设置。Insteadof:指定执行触发器而不是执行触发SQL语句,从而替代触发SQL语句的操作。Delete|insert|update:是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一项。在触发器定义中允许使用以任意顺序组合的关键字。40As:引入触发器要执行的操作Ifupdate(列):用于判断是否在指定的列上进行了insert或update操作(不能用于delete操作),可以指定多列。列名前不需要指定表名,因为在on子句中已经指定了表名。41

snosname

温馨提示

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

评论

0/150

提交评论