版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十章第十章 数据库完整性数据库完整性q什么是数据库的完整性什么是数据库的完整性q完整性约束条件完整性约束条件 q完整性控制完整性控制qOracle的完整性的完整性完整性完整性l什么是数据库的完整性什么是数据库的完整性 数据库的完整性是指数据的正确性和相容性,防止不合语义的数据进入数据库。例: 学生的年龄必须是整数,取值范围为14-29; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系; 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。完整性控制机制完整性控制机制l完整性约束条件定义机制完整性约束条件定义机制
2、完整性约束条件: 根据实际应用需求, 数据库中的数据应满足一些规定的条件。是数据模型的一个重要组成部分,它约束了数据库中数据的语义 DBMS应提供手段让用户根据现实世界的语义定义数据库的完整性约束条件,并把它们作为模式的一部分存入数据库中l完整性检查机制完整性检查机制 DBMS检查用户发出的操作请求是否违背了完整性约束条件l违约反应违约反应 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性提纲提纲q什么是数据库的完整性什么是数据库的完整性 完整性约束条件完整性约束条件 q完整性控制完整性控制qOracle的完整性的完整性完整性约束条件完整性约束条件l整个完整
3、性控制都是围绕完整性约束条件进行的,从整个完整性控制都是围绕完整性约束条件进行的,从这个角度说,完整性约束条件是完整性控制机制的核这个角度说,完整性约束条件是完整性控制机制的核心。心。完整性约束条件完整性约束条件作用的对象作用的对象l对象对象 列列l对属性的取值类型、范围、精度等的约束条件对属性的取值类型、范围、精度等的约束条件 元组元组l对元组中各个属性列间的联系的约束对元组中各个属性列间的联系的约束 关系关系l对若干元组间、关系集合上以及关系之间的联系的对若干元组间、关系集合上以及关系之间的联系的约束约束完整性约束条件完整性约束条件作用的对象作用的对象l对象的状态对象的状态 静态静态l对静
4、态对象的约束是反映数据库状态合理性的约束对静态对象的约束是反映数据库状态合理性的约束l这是最重要的一类完整性约束这是最重要的一类完整性约束 动态动态l对动态对象的约束是反映数据库状态变迁的约束对动态对象的约束是反映数据库状态变迁的约束完整性约束条件分类完整性约束条件分类l值的约束值的约束 指对数据取值类型、范围、精度等的规定, 例如对属性规定某个值集, 规定属性取值类型、格式(职工号第一位为字母, 后面是四位数字)l结构约束结构约束 指对数据之间联系的限制, 以关系库为例:同一关系的不同属性之间可能满足一定的约束条件(A1A2); 不同关系之间的属性取值也可能要满足一定的约束条件(外键取值)完
5、整性约束条件分类完整性约束条件分类l静态约束静态约束 指数据库每一确定状态的数据应满足的约束条件指数据库每一确定状态的数据应满足的约束条件, 例如外键约束等例如外键约束等l动态约束动态约束 指指DB从一种状态转变为另外一种状态时从一种状态转变为另外一种状态时, 新值和旧新值和旧值之间应满足的约束条件值之间应满足的约束条件, 例如工资调整时例如工资调整时, 要求新要求新工资不低于旧工资工资不低于旧工资)完整性约束条件完整性约束条件对象状态对象状态 动态列级约束动态列级约束 动态元组约束动态元组约束 动态关系约束动态关系约束 动态动态 静态列级约束静态列级约束 静态元组约束静态元组约束 静态关系约
6、束静态关系约束 静态静态 列列 元组元组 关系关系 对象粒度对象粒度完整性约束条件完整性约束条件 静态列级约束静态列级约束 静态列级约束是对一个列的取值域的说明,这是最静态列级约束是对一个列的取值域的说明,这是最常见最简单同时也最容易实现的一类完整性约束常见最简单同时也最容易实现的一类完整性约束完整性约束条件完整性约束条件 五类静态列级约束五类静态列级约束1) 对数据类型的约束,包括数据的类型、长度、单位、对数据类型的约束,包括数据的类型、长度、单位、精度等精度等 例:规定学生姓名的数据类型应为字符型,长度为例:规定学生姓名的数据类型应为字符型,长度为82) 对数据格式的约束对数据格式的约束例
7、:规定学号的格式为前两位表示入学年份,后四位例:规定学号的格式为前两位表示入学年份,后四位为顺序编号。出生日期的格式为为顺序编号。出生日期的格式为YY.MM.DD完整性约束条件完整性约束条件3) 对取值范围或取值集合的约束对取值范围或取值集合的约束例:规定成绩的取值范围为例:规定成绩的取值范围为0-100,年龄的取值范,年龄的取值范围为围为14-29,性别的取值集合为,性别的取值集合为男男,女女。4) 对空值的约束对空值的约束空值表示未定义或未知的值,它与零值和空格不同。空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。例如规定成绩可有的列允许空值,有的则不允许。例如
8、规定成绩可以为空值。以为空值。5) 其他约束其他约束例:关于列的排序说明,组合列等。例:关于列的排序说明,组合列等。完整性约束条件完整性约束条件 静态元组约束静态元组约束 静态元组约束就是规定组成一个元组的各个列之间静态元组约束就是规定组成一个元组的各个列之间的约束关系。的约束关系。例如:例如: 订货关系中包含发货量、订货量等列,发货量不得订货关系中包含发货量、订货量等列,发货量不得超过订货量超过订货量 教师关系中包含职称、工资等列,教授的工资不得教师关系中包含职称、工资等列,教授的工资不得低于指定的值低于指定的值 静态元组约束只局限在单个元组上静态元组约束只局限在单个元组上 完整性约束条件完
9、整性约束条件 静态关系约束静态关系约束 在一个关系的各个元组之间或者若干关系之间常常在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束存在各种联系或约束 常见静态关系约束常见静态关系约束1) 实体完整性约束实体完整性约束2) 参照完整性约束参照完整性约束3) 函数依赖约束函数依赖约束 见见11章章4) 统计约束统计约束完整性约束条件完整性约束条件 统计约束统计约束l定义某个字段值与一个关系多个元组的统计值之定义某个字段值与一个关系多个元组的统计值之间的约束关系间的约束关系例:规定部门经理的工资不得高于本部门职工平均例:规定部门经理的工资不得高于本部门职工平均工资的工资的5倍,不得低
10、于本部门职工平均工资的倍,不得低于本部门职工平均工资的2倍。倍。本部门职工的平均工资值是一个统计计算值本部门职工的平均工资值是一个统计计算值完整性约束条件完整性约束条件 动态列级约束动态列级约束 动态列级约束是修改列定义或列值时应满足的约束条件动态列级约束是修改列定义或列值时应满足的约束条件 常见动态列级约束常见动态列级约束1) 修改列定义时的约束修改列定义时的约束例:规定将原来允许空值的列改为不允许空值时,例:规定将原来允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。如果该列目前已存在空值,则拒绝这种修改。 2) 修改列值时的约束修改列值时的约束l修改列值有时需要参照其
11、旧值,并且新旧值之间需修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。要满足某种约束条件。 例:职工工资调整不得低于其原来工资,学生年龄例:职工工资调整不得低于其原来工资,学生年龄只能增长只能增长完整性约束条件完整性约束条件 动态元组约束动态元组约束 动态元组约束是指修改某个元组的值时需要参照其动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。旧值,并且新旧值之间需要满足某种约束条件。例例: 职工工资调整不得低于其原来工资职工工资调整不得低于其原来工资+工龄工龄*1.5完整性约束条件完整性约束条件 动态关系约束动态关系约束 动态关系约束是加在
12、关系变化前后状态上的限制条件动态关系约束是加在关系变化前后状态上的限制条件例:事务一致性、原子性等约束条件例:事务一致性、原子性等约束条件完整性约束条件完整性约束条件l完整性约束条件小结完整性约束条件小结 粒粒 度度状态状态列列 级级 元元 组组 级级 关关 系系 级级 静静 态态 列定义列定义类型类型格式格式值域值域 空值空值 元组值应满足元组值应满足的条件的条件 实体完整性约束实体完整性约束 参照完整性约束参照完整性约束 函数依赖约束函数依赖约束 统计约束统计约束 动动 态态 改变列定改变列定义或列值义或列值 元组新旧值之元组新旧值之间应满足的约间应满足的约束条件束条件 关系新旧状态间应关
13、系新旧状态间应满足的约束条件满足的约束条件 提纲提纲q什么是数据库的完整性什么是数据库的完整性q完整性约束条件完整性约束条件 完整性控制完整性控制qOracle的完整性的完整性完整性控制完整性控制lDBMS的完整性控制机制的完整性控制机制l关系系统三类完整性的实现关系系统三类完整性的实现l参照完整性的实现参照完整性的实现DBMS的完整性控制机制的完整性控制机制lDBMS的完整性控制机制的主要功能的完整性控制机制的主要功能定义功能定义功能允许用户定义各类完整性约束条件允许用户定义各类完整性约束条件检查功能检查功能l检查用户提供的请求是否违背了完整性约束条件检查用户提供的请求是否违背了完整性约束条
14、件违约反应违约反应l如果发现用户的操作违背了完整性约束条件如果发现用户的操作违背了完整性约束条件, 则则采取一定的动作来保证数据的完整性采取一定的动作来保证数据的完整性(一般是取消一般是取消该事务已产生的影响该事务已产生的影响-恢复恢复)DBMS的完整性控制机制的完整性控制机制l检查功能检查功能 立即执行的约束(Immediate constraints)l检查是否违背完整性约束的时机通常是在一条语句或事务执行完后立即检查 延迟执行的约束(Deferred constraints)l在某些情况下,完整性检查需要延迟到整个事务执行结束后再进行完整性约束条件完整性约束条件例例1: begin tr
15、ansaction update Students set Sno=95012 where Sno=95001; update SC set Sno=95012 where Sno=95001; commit如是立即执行约束如是立即执行约束, 事务不能成功执行事务不能成功执行如是延迟执行约束如是延迟执行约束, 事务可以成功执行事务可以成功执行DBMS的完整性控制机制的完整性控制机制例例2:银行数据库中:银行数据库中“借贷总金额应平衡借贷总金额应平衡”的约束就应该的约束就应该是延迟执行的约束是延迟执行的约束 从账号从账号A转一笔钱到账号转一笔钱到账号B为一个事务,从账号为一个事务,从账号A转转出
16、去钱后账就不平了,必须等转入账号出去钱后账就不平了,必须等转入账号B后账才能后账才能重新平衡,这时才能进行完整性检查。重新平衡,这时才能进行完整性检查。DBMS的完整性控制机制的完整性控制机制l违约反应违约反应 拒绝该操作 其他处理方法DBMS的完整性控制机制的完整性控制机制l完整性规则的形式化表述完整性规则的形式化表述一条完整性规则可以用一个五元组表示一条完整性规则可以用一个五元组表示:(D,O,A,C,P) D(Data) 约束作用的约束作用的数据对象数据对象; O(Operation) 触发完整性检查的触发完整性检查的数据库操作数据库操作,即,即当用户发出什么操作请求时需要检查该完整性规
17、则,当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;是立即检查还是延迟检查; A(Assertion) 数据对象必须满足的数据对象必须满足的断言断言或或语义约语义约束束,这是规则的主体;,这是规则的主体; C(Condition) 选择选择A作用的数据对象值的作用的数据对象值的谓词谓词; P(Procedure) 违反完整性规则时触发的违反完整性规则时触发的过程过程。DBMS的完整性控制机制的完整性控制机制例例1:在:在“学号不能为空学号不能为空”的约束中的约束中D 约束作用的对象为约束作用的对象为Sno属性属性O 插入或修改插入或修改Student 元组时元组时A Sn
18、o不能为空不能为空C 无(无(A可作用于所有记录的可作用于所有记录的Sno属性)属性)P 拒绝执行该操作拒绝执行该操作DBMS的完整性控制机制的完整性控制机制例例2:在:在“教授工资不得低于教授工资不得低于6000元元”的约束中的约束中D 约束作用的对象为工资约束作用的对象为工资Sal属性属性O 插入或修改职工元组时插入或修改职工元组时A Sal不能小于不能小于6000C 职称职称=教授教授 (A仅作用于职称仅作用于职称=教授教授的记录的记录)P 拒绝执行该操作拒绝执行该操作关系系统三类完整性的实现关系系统三类完整性的实现l目前许多关系数据库系统都提供了定义和检查实体完目前许多关系数据库系统都
19、提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能。整性、参照完整性和用户定义的完整性的功能。l对于对于违反实体完整性违反实体完整性规则和用户定义的完整性规则的规则和用户定义的完整性规则的操作操作一般都是采用拒绝执行一般都是采用拒绝执行的方式进行处理。的方式进行处理。l而对于而对于违反参照完整性违反参照完整性的操作,并不都是简单地拒绝的操作,并不都是简单地拒绝执行,有时还需要采取另一种方法,即接受这个操作,执行,有时还需要采取另一种方法,即接受这个操作,同时执行一些附加的操作,以保证数据库的状态仍然同时执行一些附加的操作,以保证数据库的状态仍然是正确的。是正确的。参照完整性的实现参
20、照完整性的实现例例:职工部门数据库包含职工表职工部门数据库包含职工表EMP和部门表和部门表DEPTDEPT关系的主码为部门号关系的主码为部门号DeptnoEMP关系的主码为职工号关系的主码为职工号Empno, 外码为部门号外码为部门号Deptno该该Deptno与与DEPT关系中关系中Deptno相对应相对应称称DEPT为被参照关系或目标关系,为被参照关系或目标关系,EMP为参照关系为参照关系RDBMS实现参照完整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面l(1) 外码是否可以接受空值的问题外码是否可以接受空值的问题 外码是否能够取空值是依赖于应用环境的语义的外码是否能够取空值是依
21、赖于应用环境的语义的 在实现参照完整性时,系统除了应该提供定义外码在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制的机制,还应提供定义外码列是否允许空值的机制例例1:在职工部门数据库中,:在职工部门数据库中,EMP关系包含有外码关系包含有外码Deptno,某一元组的这一列若为空值,表示这个职工,某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语尚未分配到任何具体的部门工作。这和应用环境的语义是相符的,因此义是相符的,因此EMP的的Deptno列应允许空值。列应允许空值。RDBMS实现参照完整性时需要考虑实现参照完整性时需
22、要考虑的的4个方面个方面例例2:在学生选课数据库中,:在学生选课数据库中,Student关系为被参照关关系为被参照关系,其主码为系,其主码为Sno。SC为参照关系,外码为为参照关系,外码为Sno。 若若SC的的Sno为空值,则表明尚不存在的某个学生,或为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记者某个不知学号的学生,选修了某门课程,其成绩记录在录在Grade列中。这与学校的应用环境是不相符的,列中。这与学校的应用环境是不相符的,因此因此SC的的Sno列不能取空值。列不能取空值。RDBMS实现参照完整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面l(
23、2) 删除被参照关系的元组时的问题删除被参照关系的元组时的问题 出现违约操作的情形出现违约操作的情形l需要删除被参照关系的某个元组,而参照关系有需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参照关系的主码若干元组的外码值与被删除的被参照关系的主码值相对应值相对应 违约反应违约反应:可有三种策略:可有三种策略l级联删除(级联删除(CASCADES)l受限删除(受限删除(RESTRICTED)l置空值删除(置空值删除(NULLIFIES)三种处理方法,哪一种是正确的,要依应用环境的语三种处理方法,哪一种是正确的,要依应用环境的语义来定。义来定。RDBMS实现参照完整性时需要
24、考虑实现参照完整性时需要考虑的的4个方面个方面 级联删除级联删除l将参照关系中所有外码值与被参照关系中要删除将参照关系中所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。元组主码值相对应的元组一起删除。 受限删除受限删除l只有当参照关系中没有任何元组的外码值与要删只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作。才执行删除操作,否则拒绝此删除操作。 置空值删除置空值删除l删除被参照关系的元组,并将参照关系中所有与删除被参照关系的元组,并将参照关系中所有与被参照关系中被删除
25、元组主码值相等的外码值置被参照关系中被删除元组主码值相等的外码值置为空值为空值RDBMS实现参照完整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面例:要删除例:要删除Student关系中关系中Sno=950001的元组,的元组, 而而SC关系中有关系中有4个元组的个元组的Sno都等于都等于950001。 级联删除级联删除:将:将SC关系中所有关系中所有4个个Sno=950001的元的元组一起删除。如果参照关系同时又是另一个关系的组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。被参照关系,则这种删除操作会继续级联下去。 受限删除受限删除:系统将拒绝执
26、行此删除操作:系统将拒绝执行此删除操作 置空值删除置空值删除:将:将SC关系中所有关系中所有Sno=950001的元组的元组的的Sno值置为空值值置为空值 (不符合应用语义不符合应用语义)RDBMS实现参照完整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面l(3) 修改被参照关系中主码的问题修改被参照关系中主码的问题 1)不允许修改主码策略不允许修改主码策略 2)允许修改主码策略允许修改主码策略l违约操作违约操作要修改要修改被参照关系被参照关系中某些元组的主码值,而中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参参照关系中有些元组的外码值正好等于被参照关系要修改的主码值照关
27、系要修改的主码值要修改要修改参照关系参照关系中某些元组的主码值,而被中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参参照关系中没有任何元组的外码值等于被参照关系修改后的主码值照关系修改后的主码值 RDBMS实现参照完整性时需要考实现参照完整性时需要考虑的虑的4个方面个方面l(3) 修改被参照关系中主码的问题修改被参照关系中主码的问题 1)不允许修改主码策略不允许修改主码策略 2)允许修改主码策略允许修改主码策略l违约反应违约反应(一一)修改的关系是被参照关系:与删除类似修改的关系是被参照关系:与删除类似l级联修改级联修改l受限修改受限修改l置空值修改置空值修改RDBMS实现参照完
28、整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面l违约反应违约反应 级联修改级联修改l修改被参照关系中主码值同时,用相同的方法修修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。改参照关系中相应的外码值。 受限修改受限修改l拒绝此修改操作。只当参照关系中没有任何元组拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。这个元组的主码值才能被修改。 置空值修改置空值修改l修改被参照关系中主码值,同时将参照关系中相修改被参照关系中主码值,同时将参照关系中相应的外码值置为
29、空值。应的外码值置为空值。RDBMS实现参照完整性时需要考虑实现参照完整性时需要考虑的的4个方面个方面 例:学生例:学生950001休学一年后复学,这时需要将休学一年后复学,这时需要将Student关系中关系中Sno=950001的元组中的元组中Sno值改为值改为960123。而。而SC关系中有关系中有4个元组的个元组的Sno=950001l级联修改级联修改:将:将SC关系中关系中4个个Sno=950001元组中的元组中的Sno值也改值也改为为960123。如果参照关系同时又是另一个关系的被参照关系,。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去则这种修改操作会继续
30、级联下去l受限修改受限修改:只有:只有SC中没有任何元组的中没有任何元组的Sno=950001时,才能时,才能修改修改Student表中表中Sno=950001的元组的的元组的Sno值改为值改为960123l置空值修改置空值修改:将:将Student表中表中Sno=950001的元组的的元组的Sno值改值改为为960123。而将。而将S表中所有表中所有Sno=950001的元组的的元组的Sno值置为值置为空值空值l在学生选课数据库中只有第一种方法是正确的在学生选课数据库中只有第一种方法是正确的RDBMS实现参照完整性时需要考实现参照完整性时需要考虑的虑的4个方面个方面l(3) 修改被参照关系中
31、主码的问题修改被参照关系中主码的问题 1)不允许修改主码策略不允许修改主码策略 2)允许修改主码策略允许修改主码策略l违约反应违约反应(二二)修改的关系是参照关系:与插入类似修改的关系是参照关系:与插入类似l受限修改受限修改l递归修改递归修改参照完整性的实现参照完整性的实现l结论结论 RDBMS在实现参照完整性时,除了需要向用户提在实现参照完整性时,除了需要向用户提供定义主码、外码的机制外,还需要向用户提供按供定义主码、外码的机制外,还需要向用户提供按照自己的应用要求选择处理依赖关系中对应的元组照自己的应用要求选择处理依赖关系中对应的元组的方法。的方法。提纲提纲q什么是数据库的完整性什么是数据
32、库的完整性q完整性约束条件完整性约束条件 q完整性控制完整性控制 Oracle的完整性的完整性Oracle的完整性的完整性lOracle中的实体完整性中的实体完整性lOracle中的参照完整性中的参照完整性lOracle中用户定义的完整性中用户定义的完整性ORACLE中的实体完整性中的实体完整性lORACLE在在CREATE TABLE语句中提供了语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列子句,供用户在建表时指定关系的主码列 在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句 ORACLE中的实体完整性中的实体完整性例例1:在学生选课数据库中
33、,要定义:在学生选课数据库中,要定义Student表的表的Sno属性为主码属性为主码 CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno); 或或: CREATE TABLE Student (Sno NUMBER(8) PRIMARY KEY, Sname VARCHAR(20), Sage NUMBER(20);ORACLE中的实体完整性中的实体完整性例例2:要在:要在SC表中定义表中定义(Sno, Cno)为主码为主码 CRE
34、ATE TABLE SC (Sno NUMBER(8), Cno NUMBER(2), Grade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno);ORACLE中的实体完整性中的实体完整性l在用在用PRIMARY KEY语句定义了关系的主码后,语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统每当用户程序对主码列进行更新操作时,系统自动进行完整性检查自动进行完整性检查 违约操作违约操作l使主属性值为空值的操作使主属性值为空值的操作l使主码值在表中不唯一的操作使主码值在表中不唯一的操作 违约反应违约反应l系统拒绝此操作,从而保证
35、了实体完整性系统拒绝此操作,从而保证了实体完整性ORACLE中的参照完整性中的参照完整性lORACLE的的CREATE TABLE语句允许用户定义参照语句允许用户定义参照完整性完整性 用用FOREIGN KEY子句定义哪些列为外码列子句定义哪些列为外码列 用用REFERENCES子句指明这些外码相应于哪个表子句指明这些外码相应于哪个表的主码的主码 用用ON DELETE CASCADE短语指明在删除被参照短语指明在删除被参照关系的元组时,同时删除参照关系中外码值等于被关系的元组时,同时删除参照关系中外码值等于被删除的被参照关系的元组中主码值的元组删除的被参照关系的元组中主码值的元组ORACLE
36、中的参照完整性中的参照完整性例例1:建立表:建立表EMP表表 CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的参照完整性中的参照完整性或:或: CREATE TABLE EMP (Empno NUMBER(4), Ena
37、me VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2) CONSTRAINT FK_DEPTNO FOREIGN KEY REFERENCES DEPT(Deptno) ON DELETE CASCADE);ORACLE中的参照完整性中的参照完整性 这时这时EMP表中外码为表中外码为Deptno,它相应于,它相应于DEPT表中表中的主码的主码Deptno。 当要修改当要修改DEPT表中的表中的DEPTNO值时,先要检查值时,先要检查EMP表中有无元组的表中有无元组的Deptno值与之对应
38、值与之对应l若没有,系统接受这个修改操作若没有,系统接受这个修改操作l否则,系统拒绝此操作否则,系统拒绝此操作 ORACLE中的参照完整性中的参照完整性 当要删除当要删除DEPT表中某个元组时,系统要检查表中某个元组时,系统要检查EMP表,若找到相应元组即将其随之删除。表,若找到相应元组即将其随之删除。 当要插入当要插入EMP表中某个元组时,系统要检查表中某个元组时,系统要检查DEPT表,先要检查表,先要检查DEPT表中有无元组的表中有无元组的Deptno值与之值与之对应对应l若没有,系统拒绝此插入操作若没有,系统拒绝此插入操作l否则,系统接受此操作否则,系统接受此操作ORACLE中的用户定义
39、的完整性中的用户定义的完整性lORACLE中定义用户完整性的两类方法中定义用户完整性的两类方法 (1) 用用CREATE TABLE语句在建表时定义用户完整语句在建表时定义用户完整性约束性约束 (2) 使用使用alter table (3) 通过触发器来定义用户的完整性规则通过触发器来定义用户的完整性规则ORACLE中的用户定义的完整性中的用户定义的完整性l(1) 用用CREATE TABLE语句在建表时定义用户完整性约束语句在建表时定义用户完整性约束 可定义三类完整性约束可定义三类完整性约束l列值非空(列值非空(NOT NULL短语)短语)l列值唯一(列值唯一(UNIQUE短语)短语)l检查
40、列值是否满足一个布尔表达式(检查列值是否满足一个布尔表达式(CHECK短语)短语)ORACLE中的用户定义的完整性中的用户定义的完整性例例1:建立部门表:建立部门表DEPT,要求部门名称,要求部门名称Dname列取值唯一,列取值唯一,部门编号部门编号Deptno列为主码列为主码CREATE TABLE DEPT(Deptno NUMBER,Dname VARCHAR(9) CONSTRAINT U1 UNIQUE,Loc VARCHAR(10),CONSTRAINT PK_DEPT PRIMARY KEY (Deptno);其中其中 CONSTRAINT U1 UNIQUE 表示约束名为表示约
41、束名为U1,该约束要求该约束要求Dname列值唯一。列值唯一。ORACLE中的用户定义的完整性中的用户定义的完整性例例2: 建立学生登记表建立学生登记表Student,要求学号在,要求学号在900000至至999999之之间,年龄间,年龄29,性别只能是,性别只能是男男或或女女,姓名非空,姓名非空CREATE TABLE Student(Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999), Sname VARCHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMBER(3) CONSTRAI
42、NT C3 CHECK (Sage 29), Ssex VARCHAR(2) CONSTRAINT C4 CHECK (Ssex IN (男男, 女女);ORACLE中的用户定义的完整性中的用户定义的完整性例例3 :建立职工表:建立职工表EMP,要求每个职工的应发工资不得超过,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列元。应发工资实际上就是实发工资列Sal与扣除项与扣除项Deduct之和。之和。 CREATE TABLE EMP (Eno NUMBER(4) Ename VARCHAR(10), Job VARCHAR(8), Sal NUMBER(7,2), De
43、duct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS C1 CHECK (Sal + Deduct =3000);ORACLE中的用户定义的完整性中的用户定义的完整性l(2) 使用使用alter table例例1:修改缺省值:修改缺省值原来原来: create table Students(, sex char(1) default M);替换替换: alter table Students replace sex default FORACLE中的用户定义的完整性中的用户定义的完整性l(2) 使用使用alter table修改缺省值修改缺省值原来原来:
44、 create table Students(, sex char(1) default M);替换替换: alter table Students replace sex default F;增加约束增加约束 alter table Students add constraint chk_SA check (SA30);删除已有约束删除已有约束 alter table Students drop constraint chk_SA;ORACLE中的用户定义的完整性中的用户定义的完整性l(3) 通过通过触发器(触发器(Trigger)来定义用户的完整性规则来定义用户的完整性规则 触发器触发器是
45、一种特殊类型的存储过程,通过是一种特殊类型的存储过程,通过事件(插事件(插入、删除和更新)入、删除和更新)触发执行触发执行 是实现复杂完整性约束的有效方法是实现复杂完整性约束的有效方法 在应用中的其他作用在应用中的其他作用l维护复制数据、保持导出数据列的当前值(自动维护复制数据、保持导出数据列的当前值(自动更新导出列)、业务规则限制(书价不许一次提更新导出列)、业务规则限制(书价不许一次提价超过价超过10%)、实现定制记录(监控:不许周六、)、实现定制记录(监控:不许周六、周日插入表,银行必须记录大于周日插入表,银行必须记录大于10000的事务的事务等。)等。)ORACLE中的用户定义的完整性中的用户定义的完整性l(3) 通过通过触发器(触发器(Trigger)来定义用户的完整性规则来定义用户的完整性规则 三部分三部分l事件:激活触发器事件:激活触发器l条件:测试触发器是否满足运行的条件条件:测试触发器是否满足运行的条件l动作:触发器运行后执行的动作动作:触发器运行后执行的动作 数据库触发器是一类靠事件驱动的特殊过程,一旦由某数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层进行集中的完服务器自动激活相应的触发子,在核心层进行集
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度港口集装箱司机雇佣协议3篇
- 2025版销售人员劳动合同模板(关注员工权益保障)3篇
- 二零二五年度老旧小区物业委托管理改造协议3篇
- 二零二五年度企事业单位食堂承包服务合同范本3篇
- 压型钢板门施工方案
- 二零二五版施工环境保护责任与保障协议3篇
- 二零二五版社保缴纳劳动合同范本(含生育保险待遇)2篇
- 竹木墙板装修施工方案
- 二零二五年度热镀锌钢管加工与定制合同协议
- 二零二五年度建筑设施综合维护保养服务协议3篇
- (二模)遵义市2025届高三年级第二次适应性考试试卷 地理试卷(含答案)
- 二零二五隐名股东合作协议书及公司股权代持及回购协议
- 四川省成都市武侯区2023-2024学年九年级上学期期末考试化学试题
- 2025年计算机二级WPS考试题目
- 高管绩效考核全案
- 教育部《中小学校园食品安全和膳食经费管理工作指引》知识培训
- 初一到初三英语单词表2182个带音标打印版
- 《人力资源管理》全套教学课件
- 2024年秋季人教版七年级上册生物全册教学课件(2024年秋季新版教材)
- 年度重点工作计划
- 《经济思想史》全套教学课件
评论
0/150
提交评论