数据库系统第五章_第1页
数据库系统第五章_第2页
数据库系统第五章_第3页
数据库系统第五章_第4页
数据库系统第五章_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

第五章数据库完整性5.1实体完整性5.2参照完整性5.3用户自定义完整性5.4完整性约束命名子句5.6触发器1.数据库的完整性正确性相容性数据库完整性的实现:

(1)定义完整性约束条件(2)完整性检查(3)违约反应1、完整性约束条件完整性约束条件作用的对象:关系元组列列约束:是指列的类型、取值范围、精度、排序等约束.元组约束:是指元组中各个字段间的联系约束.关系约束:是指若干元组间、关系集合上以及关系之间的联系约束.2.完整性约束条件作用对象的状态:静态动态静态约束:是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束.动态约束:是指数据库从一种状态转变为另一种状态时,新、旧值之间所满足的约束条件,它是反映数据库状态变迁的约束.完整性约束条件分类:列元组关系动态静态1234561:静态列级约束2:静态元组约束3:静态关系约束4:动态列级约束5:动态元组约束6:动态关系约束3.2、实现数据完整性实体完整性参照完整性用户定义的完整性primarykeyforeignkey取空值(null)的约束默认值(default)约束列值取值范围(check)约束惟一值约束(unique)触发器4.完整性控制完整性控制机制的功能:(1)定义功能(2)检查功能(3)如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性.完整性规则的表示:五元组(D,O,A,C,P)D(Data):指约束作用的数据对象O(Operation):触发完整性检查的数据库操作A(Assertion):数据对象必须满足的断言或语义约束C(Condition):选择A作用的数据对象值的谓词P(Procedure):违反完整性规则时触发的过程立即执行检查延迟执行检查5.例子1:对表Student的“学号不能为空”的约束规定.五元组(D,O,A,C,P)D:约束作用的对象为Sno属性O:插入或修改Student元组时A:Sno不能为空C:无(A作用于所有记录的Sno属性)P:拒绝执行该操作例子2:对教师基本情况表的“教授工资不得低于1000元”的约束规定.五元组(D,O,A,C,P)D:约束作用的对象为工资Sal属性O:插入或修改职工元组时A:Sal不能小于1000C:职称=‘教授’P:拒绝执行该操作6.实现参照完整性要考虑的几个问题:1.外码能否接受空值的问题学生(学号,姓名,性别,专业号,年龄)专业(专业号,专业名)外码例子1:外码取空值表示该学生尚未分配到任何具体的专业学习.与应用环境的语义相符,因此外码可取空值.例子2:学生(学号,姓名,性别,专业号,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)外码(学号)取空值表示一个不存在的学生选了某门课程,成绩记录在成绩列中.与应用环境的语义不相符,因此外码不能取空值.7.2.在被参照关系中删除元组的问题例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)学号姓名性别专业号年龄95001李勇男CS20…………….被参照关系学号课程号成绩950011789500138095001489………三种策略:

(1)级联删除(2)受限删除(3)置空值删除在学生关系中删除元组(95001,李勇,男,CS,20)8.5.1实体完整性5.1.1定义例子1:createtablestudent(snochar(9)primarykey,snamechar(20)unique,ssexchar(2),sagesmallint,sdeptchar(20));例子2:createtablesc(snochar(9),cnochar(4),gradesmallint,

primarykey(sno,cno));5.1.2检查(1)检查主码值是否唯一,如果不唯一拒绝插入或修改。(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。9.5.1.3处理10.5.2参照完整性createtablecourse(cnochar(4)primarykey,canmechar(40),cpnochar(4),ccreditsmallint,

foreignkey(cpno)referencescourse(cno));createtablesc(snochar(9),cnochar(4),gradesmallint,primarykey(sno,cno),

foreignkey(sno)referencesstudent(sno),

foreignkey(cno)referencescourse(cno));5.2.1定义11.5.1.2检查及处理破坏参照完整性的4种情况:(1)在参照表插入元组;(2)在参照表中修改外码值;(3)在被参照表中删除元组;(4)在被参照表中修改主码值;12.1.在参照关系中插入元组时的问题例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)参照关系学号姓名性别专业号年龄95001李勇男CS20…………….学号课程号成绩950011789500138095001489………策略:(1)拒绝在选修关系中插入元组(99001,1,90)13.例子:S(S#,SN,A#,SA)A(A#,AN)在S关系中插入元组(95001,李勇,031,20)?策略:(1)拒绝14.2、修改参照关系的外码例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)参照关系学号姓名性别专业号年龄95001李勇男CS20…………….学号课程号成绩950011789500138095001489………在选修关系中元组(95001,1,90)修改为(99001,1,90)策略:(1)拒绝15.例子:S(S#,SN,A#,SA)A(A#,AN)在S关系中修改元组(95001,李勇,001,20)的A#改为030?策略:(1)拒绝16.3.在被参照关系中删除元组的问题例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)学号姓名性别专业号年龄95001李勇男CS20…………….被参照关系学号课程号成绩950011789500138095001489………三种策略:

(1)拒绝删除

(2)级联删除(3)置空值删除在学生关系中删除元组(95001,李勇,男,CS,20)17.例子:A(A#,AN)S(S#,SN,A#,SA)在A关系中删除元组(001,物理)?三种策略:

(1)级联删除(2)拒绝删除(3)置空值删除18.4、修改被参照关系的主码例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)学号姓名性别专业号年龄95001李勇男CS20…………….学号课程号成绩950011789500138095001489………被参照关系在学生关系中修改元组(95001,李勇,男,CS,20)的学号为960123三种策略:

(1)级联修改(2)拒绝修改(3)置空值修改19.例子:S(S#,SN,A#,SA)A(A#,AN)在A关系中修改元组(001,物理)中的主码001为005?三种策略:

(1)级联修改(2)拒绝修改(3)置空值修改20.显示说明参照完整性处理的示例:createtablecourse(cnochar(4)primarykey,canmechar(40),cpnochar(4),ccreditsmallint,foreignkey(cpno)referencescourse(cno));createtablesc(snochar(9),cnochar(4),gradesmallint,primarykey(sno,cno),foreignkey(sno)referencesstudent(sno),foreignkey(cno)referencescourse(cno)ondeletenoactiononupdatecascade);21.5.3用户定义的完整性5.3.1可定义三类完整性约束:列值非空(NOTNULL短语)列值唯一(UNIQUE短语)检查列值是否满足一个布尔表达式(CHECK短语)例1:建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT(DeptnoNUMBER,DnameVARCHAR(9)CONSTRAINTU1

UNIQUE,LocVARCHAR(10),CONSTRAINTPK_DEPT

PRIMARYKEY(Deptno));22.例2:建立学生登记表Student,要求学号在90000至99999之间,年龄<29,性别只能是‘男’或‘女’,姓名非空.CREATETABLEStudent(SnoNUMBER(5)

CONSTRAINTC1CHECK(SnoBETWEEN90000AND99999),SnameVARCHAR(20)CONSTRAINTC2NOTNULL,SageNUMBER(3)CONSTRAINTC3CHECK(Sage<29),SsexVARCHAR(2)

CONSTRAINTC4CHECK(SsexIN('男','女')));23.例3:建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。CREATETABLEEMP(EnoNUMBER(4)EnameVARCHAR(10),JobVARCHAR(8),SalNUMBER(7,2),DeductNUMBER(7,2)DeptnoNUMBER(2),

CONSTRAINTSC1CHECK(Sal+Deduct<=3000));5.3.2检查与处理拒绝24.5.4完整性约束命名子句1、子句命名2、子句删除3、字句添加(1)Altertablestudentdropconstraintc1;(2)Altertablestudentaddconstraintc2check(snobetween9000000and999999);25.四、SQLServer中的触发器。1.定义触发器Createtrigger<触发器名>

on<表名>{for|after|insteadof}<触发事件>

温馨提示

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

评论

0/150

提交评论