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

下载本文档

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

文档简介

1、数据库系统概论数据库系统概论 An Introduction to Database System 第第5 5章章 数据库完整性数据库完整性 第第2节节 数据库完整性数据库完整性 一、完整性约束条件一、完整性约束条件 二、完整性控制二、完整性控制 三、三、 SQL 完整性完整性 四、四、 小结小结 5.2 5.2 数据库完整性数据库完整性 什么是数据库的完整性什么是数据库的完整性 n数据的正确性和相容性数据的正确性和相容性 n防止不合语义的数据进入数据库。防止不合语义的数据进入数据库。 例例: 学生的年龄必须是整数,取值范围为学生的年龄必须是整数,取值范围为14-29; 学生的性别只能是男或女

2、;学生的性别只能是男或女; 学生的学号一定是唯一的;学生的学号一定是唯一的; 学生所在的系必须是学校开设的系;学生所在的系必须是学校开设的系; n完整性:否真实地反映现实世界完整性:否真实地反映现实世界 数据库的完整性数据库的完整性 n 1 1、数据库的完整性是指数据的正确性和相容性。数据库中数据、数据库的完整性是指数据的正确性和相容性。数据库中数据 发生错误,往往是由非法更新引起的。发生错误,往往是由非法更新引起的。 n数据库完整性是通过数据库完整性是通过DBMSDBMS的的完整性子系统完整性子系统实现的,它有两个功能:实现的,它有两个功能: n(1)(1)监督事务的执行,并测试是否违反完整

3、性规则。监督事务的执行,并测试是否违反完整性规则。 (2)(2)如有违反,则采取恰当的操作,如拒绝、报告违反情况,改如有违反,则采取恰当的操作,如拒绝、报告违反情况,改 正错误等方法进行处理。正错误等方法进行处理。 数据库完整性子系统是根据数据库完整性子系统是根据 完整性规则集完整性规则集 工作的,这些完整性工作的,这些完整性 规则包括:域完整性规则、域联系的规则、关系完整性规则规则包括:域完整性规则、域联系的规则、关系完整性规则( (一一 个比一个大个比一个大) ) SQLSQL中的完整性约束中的完整性约束 n在在SQLSQL中,表达完整性约束的规则有主键约束、外键中,表达完整性约束的规则有

4、主键约束、外键 约束、属性值约束和全局约束等多种形式。约束、属性值约束和全局约束等多种形式。 n 主键约束:主键约束:可用主键子句或主键短语可用主键子句或主键短语 PRIMARY KEY PRIMARY KEY 来定义。来定义。 n外键约束:外键约束:可用外键子句来定义如可用外键子句来定义如 FOREIGN KEY FOREIGN KEY (S#) REFERNCE S(S#) (S#) REFERNCE S(S#) n属性值约束:包括非空值约束属性值约束:包括非空值约束(NOT NULL)(NOT NULL)和基于属性和基于属性 的检查子句的检查子句(CHECK) (CHECK) n域约束子

5、句域约束子句 如如CREAT DOMAIN AGE SMALLINT CREAT DOMAIN AGE SMALLINT CHECK (VALUE10) CHECK (VALUE10) n全局约束:包括基于元组的检查子句全局约束:包括基于元组的检查子句(CHECK) (CHECK) 。 完整性控制机制完整性控制机制 1.完整性约束条件定义机制完整性约束条件定义机制 2.完整性检查机制完整性检查机制 3.违约反应违约反应 完整性约束条件定义完整性约束条件定义 n完整性约束条件:数据模型的组成部分约束数据库中完整性约束条件:数据模型的组成部分约束数据库中 数据的数据的语义语义 nDBMS应提供定义

6、数据库完整性约束条件,并把它们应提供定义数据库完整性约束条件,并把它们 作为模式的一部分存入数据库中作为模式的一部分存入数据库中 完整性控制机制完整性控制机制 n检查用户发出的操作请求是否违背了完检查用户发出的操作请求是否违背了完 整性约束条件整性约束条件 违约反应违约反应 n如果发现用户的操作请求使数据违背了如果发现用户的操作请求使数据违背了 完整性约束条件,则采取一定的动作来完整性约束条件,则采取一定的动作来 保证数据的完整性。保证数据的完整性。 一、完整性约束条件一、完整性约束条件 完整性约束条件作用的对象完整性约束条件作用的对象 n列列:对属性的取值类型、范围、精度等的约束条件:对属性

7、的取值类型、范围、精度等的约束条件 n元组元组:对元组中各个:对元组中各个属性列间属性列间的联系的约束的联系的约束 n关系关系:对若干元组间、关系集合上以及关系之间的:对若干元组间、关系集合上以及关系之间的 联系的约束联系的约束 完整性约束条件(续)完整性约束条件(续) n静态静态 n对静态对象的约束是反映数据库状态对静态对象的约束是反映数据库状态合理性合理性的约束的约束 n动态动态 n对动态对象的约束是反映数据库状态对动态对象的约束是反映数据库状态变迁变迁的约束的约束 完整性约束条件分类完整性约束条件分类 六类完整性约束条件六类完整性约束条件 n 静态列级约束静态列级约束 n 静态元组约束静

8、态元组约束 n 静态关系约束静态关系约束 n 动态列级约束动态列级约束 n 动态元组约束动态元组约束 n 动态关系约束动态关系约束 完整性约束条件(续)完整性约束条件(续) 对象状态对象状态 动态列级约束动态列级约束 动态元组约束动态元组约束 动态关系约束动态关系约束 动态动态 静态列级约束静态列级约束 静态元组约束静态元组约束 静态关系约束静态关系约束 静态静态 列列 元组元组 关系关系 对象粒度对象粒度 1. 静态列级约束静态列级约束 n静态列级约束:对取值域的说明静态列级约束:对取值域的说明 n最常见、最简单、最容易实现的一类完最常见、最简单、最容易实现的一类完 整性约束整性约束 静态列

9、级约束静态列级约束 n五类静态列级约束五类静态列级约束 1) 数据类型约束:数据的类型、长度、单位、精度等数据类型约束:数据的类型、长度、单位、精度等 2) 对数据格式的约束对数据格式的约束 例:例: 学号:前两位表示入学年份,后四位为顺序编号学号:前两位表示入学年份,后四位为顺序编号 日期:日期:YY.MM.DD。 3) 取值范围或取值集合的约束取值范围或取值集合的约束 例:规定成绩的取值范围为例:规定成绩的取值范围为0-100 性别的取值集合为性别的取值集合为男男,女女 4) 对空值的约束对空值的约束 空值:未定义或未知的值空值:未定义或未知的值 空值:与零值和空格不同空值:与零值和空格不

10、同 有的列允许空值,有的则不允许,如成绩可为空值有的列允许空值,有的则不允许,如成绩可为空值 5) 其他约束其他约束 例:关于列的排序说明,组合列等例:关于列的排序说明,组合列等 静态列级约束静态列级约束 2. 静态元组约束静态元组约束 规定元组的各个列之间的约束关系规定元组的各个列之间的约束关系 例:订货关系中发货量例:订货关系中发货量1500元元 静态元组约束只局限在元组上静态元组约束只局限在元组上 3. 静态关系约束静态关系约束 关系的各个元组之间或若干关系之间存在的各种联关系的各个元组之间或若干关系之间存在的各种联 系或约束系或约束 n常见的静态约束有四种:常见的静态约束有四种: n实

11、体完整性实体完整性 n参照完整性参照完整性 n函数依赖约束函数依赖约束-隐念在关系模式中隐念在关系模式中 n统计约束统计约束-某个字段值与一个关系多个元组的统计值之某个字段值与一个关系多个元组的统计值之 间的约束关系。间的约束关系。 统计约束统计约束 n定义某个字段值一个关系多个元组的统计值之间的约定义某个字段值一个关系多个元组的统计值之间的约 束关系束关系 n例:例: n职工平均工资的职工平均工资的2倍倍=部门经理的工资部门经理的工资= 原来工资原来工资 年龄只能增长年龄只能增长 5. 动态元组约束动态元组约束 修改元组值修改元组值: 各个字段之间要满足的约束条件各个字段之间要满足的约束条件

12、 例例: 职工工资调整不得低于其原来工资职工工资调整不得低于其原来工资 + 工龄工龄*2 6. 动态关系约束动态关系约束 关系变化前后状态:限制条件关系变化前后状态:限制条件 例:事务一致性、原子性等约束条件例:事务一致性、原子性等约束条件 完整性约束条件小结完整性约束条件小结 粒 度 状态 列 级 元 组 级 关 系 级 静 态 列定义 类型 格式 值域 空值 元组值应满足 的条件 实体完整性约束 参照完整性约束 函数依赖约束 统计约束 动 态 改变列定 义或列值 元组新旧值之间 应满足的约束条 件 关系新旧状态间 应满足的约束条 件 二、二、 完整性控制完整性控制 1、DBMS的完整性控制

13、机制的完整性控制机制 2、关系系统三类完整性的实现、关系系统三类完整性的实现 3、参照完整性的实现、参照完整性的实现 1、DBMS的完整性控制机制的完整性控制机制 (1) 定义功能定义功能 一个完善的完整性控制机制应该允许用户定义一个完善的完整性控制机制应该允许用户定义 各类完整性约束条件。各类完整性约束条件。 DBMS的完整性控制机制(续)的完整性控制机制(续) (2) 检查功能检查功能 n立即执行的约束立即执行的约束(Immediate constraints) 语句执行完后立即检查是否违背完整性约束语句执行完后立即检查是否违背完整性约束 n 延迟执行的约束延迟执行的约束(Deferred

14、 constrainsts) 完整性检查延迟到整个事务执行结束后进行完整性检查延迟到整个事务执行结束后进行 DBMS的完整性控制机制(续)的完整性控制机制(续) 例:银行数据库中例:银行数据库中“借贷总金额应平衡借贷总金额应平衡”的约束的约束 就应该是延迟执行的约束就应该是延迟执行的约束 n从账号从账号A转一笔钱到账号转一笔钱到账号B为一个事务,从为一个事务,从 账号账号A转出去钱后账就不平了,必须等转入转出去钱后账就不平了,必须等转入 账号账号B后账才能重新平衡,这时才能进行完后账才能重新平衡,这时才能进行完 整性检查。整性检查。 DBMS的完整性控制机制(续)的完整性控制机制(续) (3)

15、 违约反应违约反应 n 拒绝该操作拒绝该操作 n 其他处理方法其他处理方法 DBMS的完整性控制机制(续)的完整性控制机制(续) 一条完整性规则可以用一个五元组表示一条完整性规则可以用一个五元组表示: (D,O,A,C,P) nD(Data) 约束作用的约束作用的数据对象数据对象; nO(Operation) 触发完整性检查的触发完整性检查的数据库操作数据库操作 当用户发出什么操作请求时需要检查该完整性规则当用户发出什么操作请求时需要检查该完整性规则 是立即检查还是延迟检查;是立即检查还是延迟检查; nA(Assertion) 数据对象必须满足的数据对象必须满足的断言断言或或语义约束语义约束

16、这是规则的主体;这是规则的主体; n C(Condition) 选择选择A作用的数据对象值的作用的数据对象值的谓词谓词; n P(Procedure) 违反完整性规则时触发的违反完整性规则时触发的过程过程。 DBMS的完整性控制机制(续)的完整性控制机制(续) 例例1:在:在“学号不能为空学号不能为空”的约束中的约束中 D 约束作用的对象为约束作用的对象为Sno属性属性 O 插入或修改插入或修改Student 元组时元组时 A Sno不能为空不能为空 C 无(无(A可作用于所有记录的可作用于所有记录的Sno属性)属性) P 拒绝执行该操作拒绝执行该操作 DBMS的完整性控制机制(续)的完整性控

17、制机制(续) 例例2:在:在“教授工资不得低于教授工资不得低于2000元元”的约束中的约束中 D 约束作用的对象为工资约束作用的对象为工资Sal属性属性 O 插入或修改职工元组时插入或修改职工元组时 A Sal不能小于不能小于2000 C 职称职称=教授教授 (A仅作用于职称仅作用于职称=教授教授的记录的记录) P 拒绝执行该操作拒绝执行该操作 2、关系系统三类完整性的实现、关系系统三类完整性的实现 n关系数据库系统都提供了定义和检查关系数据库系统都提供了定义和检查实体完整实体完整 性性、参照完整性参照完整性和和用户定义用户定义的完整性的功能的完整性的功能 n违反实体完整性规则和用户定义的完整

18、性规则违反实体完整性规则和用户定义的完整性规则 的操作:的操作: 一般是拒绝执行一般是拒绝执行 n违反参照完整性的操作:违反参照完整性的操作: n拒绝执行拒绝执行 n接受这个操作,同时执行一些附加的操作,以保证接受这个操作,同时执行一些附加的操作,以保证 数据库的状态正确数据库的状态正确 3、参照完整性的实现、参照完整性的实现 例例:职工部门数据库包含职工表职工部门数据库包含职工表EMP和部门表和部门表DEPT 1 DEPT关系的主码为部门号关系的主码为部门号Deptno 2 EMP关系的主码为职工号关系的主码为职工号Empno, 外码为部门号外码为部门号 Deptno 称称DEPT为被参照关

19、系或目标关系,为被参照关系或目标关系,EMP为参照关系为参照关系 RDBMS实现参照完整性时需要考虑以下实现参照完整性时需要考虑以下4方面:方面: (1) 外码是否可以接受空值的问题外码是否可以接受空值的问题 n外码是否能够取空值:依赖于应用环境的外码是否能够取空值:依赖于应用环境的 语义语义 n实现参照完整性:实现参照完整性: 系统提供定义外码的机制系统提供定义外码的机制 定义外码列是否允许空值的机制定义外码列是否允许空值的机制 外码是否可以接受空值的问题(续)外码是否可以接受空值的问题(续) 例例1:在职工部门数据库中,:在职工部门数据库中, EMP关系包含有外码关系包含有外码Deptno

20、 某元组的这一列若为空值,表示这个职某元组的这一列若为空值,表示这个职 工尚未分配到任何具体的部门工作工尚未分配到任何具体的部门工作 和应用环境的语义是相符和应用环境的语义是相符 外码是否可以接受空值的问题(续)外码是否可以接受空值的问题(续) 例例2:学生选课数据库:学生选课数据库 Student关系为被参照关系,其主码为关系为被参照关系,其主码为Sno。 SC为参照关系,外码为为参照关系,外码为Sno。 若若SC的的Sno为空值:表明尚不存在的某个学生,或者为空值:表明尚不存在的某个学生,或者 某个不知学号的学生,选修了某门课程,其成绩记录某个不知学号的学生,选修了某门课程,其成绩记录 在

21、在Grade中中 与学校的应用环境是不相符的,因此与学校的应用环境是不相符的,因此SC的的Sno列不能列不能 取空值。取空值。 (2)在被参照关系中删除元组时的问题)在被参照关系中删除元组时的问题 出现违约操作的情形:出现违约操作的情形: 删除被参照关系的某个元组(删除被参照关系的某个元组(student) 而参照关系有若干元组而参照关系有若干元组(SC)的外码值与被的外码值与被 删除的被参照关系的主码值相同删除的被参照关系的主码值相同 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题 n违约反应:可有三种策略违约反应:可有三种策略 n级联删除(级联删除(CASCADES) n受限

22、删除(受限删除(RESTRICTED) n置空值删除(置空值删除(NULLIFIES) 这三种处理方法,哪一种是正确的,要依应这三种处理方法,哪一种是正确的,要依应 用环境的语义来定用环境的语义来定 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题 n级联删除级联删除 将参照关系中外码值与被参照关系中要删除元将参照关系中外码值与被参照关系中要删除元 组主码值相对应的元组组主码值相对应的元组一起一起删除删除 n受限删除受限删除 当参照关系中没有任何元组的外码值与要删除当参照关系中没有任何元组的外码值与要删除 的被参照关系的元组的主码值相对应时,系统的被参照关系的元组的主码值相对应时,

23、系统 才执行删除操作,否则拒绝此删除操作才执行删除操作,否则拒绝此删除操作 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题 n置空值删除置空值删除 删除被参照关系的元组,并将参照关系删除被参照关系的元组,并将参照关系 中与被参照关系中被删除元组主码值相中与被参照关系中被删除元组主码值相 等的外码值置为空值。等的外码值置为空值。 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题 例:要删除例:要删除Student关系中关系中Sno=950001的元组,的元组, 而而SC关系中有关系中有4个元组的个元组的Sno都等于都等于950001。 n级联删除:将级联删除:将SC关系

24、中所有关系中所有4个个Sno=950001的的 元组一起删除。如果参照关系同时又是另一个关系元组一起删除。如果参照关系同时又是另一个关系 的被参照关系,则这种删除操作会继续级联下去的被参照关系,则这种删除操作会继续级联下去 n受限删除:系统将拒绝执行此删除操作。受限删除:系统将拒绝执行此删除操作。 在被参照关系中删除元组时的问题在被参照关系中删除元组时的问题 n置空值删除:将置空值删除:将SC关系中所有关系中所有 Sno=950001的元组的的元组的Sno值置为空值。值置为空值。 n在学生选课数据库中,显然第一种方法和第在学生选课数据库中,显然第一种方法和第 二种方法都是对的。第三种方法不符合

25、应用二种方法都是对的。第三种方法不符合应用 环境语义。环境语义。 (3)在参照关系中插入元组时的问题)在参照关系中插入元组时的问题 n出现违约操作的情形出现违约操作的情形 n需要在参照关系中插入元组,而被参需要在参照关系中插入元组,而被参 照关系不存在相应的元组照关系不存在相应的元组 n违约反应违约反应 n受限插入受限插入 n递归插入递归插入 在参照关系中插入元组时的问题在参照关系中插入元组时的问题 n受限插入受限插入 n仅当被参照关系中存在相应的元组,其主码仅当被参照关系中存在相应的元组,其主码 值与参照关系插入元组的外码值相同时,系值与参照关系插入元组的外码值相同时,系 统才执行插入操作,

26、否则拒绝此操作。统才执行插入操作,否则拒绝此操作。 n 递归插入递归插入 n首先向被参照关系中插入相应的元组,其主首先向被参照关系中插入相应的元组,其主 码值等于参照关系插入元组的外码值,然后码值等于参照关系插入元组的外码值,然后 向参照关系插入元组。向参照关系插入元组。 在参照关系中插入元组时的问题在参照关系中插入元组时的问题 例:向例:向SC关系插入(关系插入(99001,1,90)元组,而)元组,而 Student关系中尚没有关系中尚没有Sno=99001的学生的学生 n受限插入:系统将拒绝向受限插入:系统将拒绝向SC关系插入(关系插入(99001, 1,90)元组)元组 n递归插入:系

27、统将首先向递归插入:系统将首先向Student关系插入关系插入 Sno=99001的元组,然后向的元组,然后向SC关系插入关系插入 (99001,1,90)元组。)元组。 (4) 修改修改被参照关系中主码的问题被参照关系中主码的问题 n两种策略两种策略 (1)不允许修改主码不允许修改主码 (2)允许修改主码允许修改主码 允许修改主码策略允许修改主码策略 n违约操作违约操作 要要修改被参照关系修改被参照关系中某些元组的主码值,中某些元组的主码值, 而参照关系中有些元组的外码值正好等于而参照关系中有些元组的外码值正好等于 被参照关系要修改的主码值被参照关系要修改的主码值 要要修改参照关系修改参照关

28、系中某些元组的主码值,而中某些元组的主码值,而 被参照关系中没有任何元组的外码值等于被参照关系中没有任何元组的外码值等于 被参照关系修改后的主码值被参照关系修改后的主码值 允许修改主码策略允许修改主码策略 n违约反应违约反应 (1) n修改的关系是被参照关系:与删修改的关系是被参照关系:与删 除类似除类似 n级联修改级联修改 n受限修改受限修改 n置空值修改置空值修改 允许修改主码策略允许修改主码策略 n级联修改级联修改 n修改被参照关系中主码值同时,用相同的方法修改参修改被参照关系中主码值同时,用相同的方法修改参 照关系中相应的外码值。照关系中相应的外码值。 n受限修改受限修改 n拒绝此修改

29、操作。只当参照关系中没有任何元组的外拒绝此修改操作。只当参照关系中没有任何元组的外 码值等于被参照关系中某个元组的主码值时,这个元码值等于被参照关系中某个元组的主码值时,这个元 组的主码值才能被修改。组的主码值才能被修改。 n置空值修改置空值修改 n修改被参照关系中主码值,同时将参照关系中相应的修改被参照关系中主码值,同时将参照关系中相应的 外码值置为空值。外码值置为空值。 允许修改主码策略允许修改主码策略 例:将例:将Student关系中关系中Sno=950001的元组中的元组中 Sno值改为值改为960123。而。而SC关系中有关系中有 4个元组个元组 的的Sno=950001 n级联修改

30、:将级联修改:将SC关系中关系中4个个Sno=950001元组元组 中的中的Sno值也改为值也改为960123。如果参照关系同时。如果参照关系同时 又是另一个关系的被参照关系,则这种修改操又是另一个关系的被参照关系,则这种修改操 作会继续级联下去。作会继续级联下去。 允许修改主码策略允许修改主码策略 n受限修改:只有受限修改:只有SC中没有任何元组的中没有任何元组的 Sno=950001时,才能修改时,才能修改Student表中表中 Sno=950001的元组的的元组的Sno值改为值改为960123。 n置空值修改:将置空值修改:将Student表中表中Sno=950001的的 元组的元组的S

31、no值改为值改为960123。而将。而将SC表中所有表中所有 Sno=950001的元组的的元组的Sno值置为空值。值置为空值。 n在学生选课数据库中只有第二种方法是正确的在学生选课数据库中只有第二种方法是正确的。 允许修改主码策略允许修改主码策略 n违约反应违约反应 (2) n修改的关系是参照关系:与插入修改的关系是参照关系:与插入 类似类似 n受限插入受限插入 n递归插入递归插入 参照完整性的实现参照完整性的实现 RDBMS在实现参照完整性时在实现参照完整性时: n需要向用户提供定义主码、外码的机制需要向用户提供定义主码、外码的机制 n向用户提供按照自己的应用要求选择处理依赖关向用户提供按

32、照自己的应用要求选择处理依赖关 系中对应的元组的方法系中对应的元组的方法 三、三、 SQL server的完整性的完整性 1、 SQL server中的实体完整性中的实体完整性 2、 SQL server中的参照完整性中的参照完整性 3、 SQL server中用户定义的完整性中用户定义的完整性 1、 SQL server中的实体完整性中的实体完整性 n在在CREATE TABLE语句中提供了语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。子句,供用户在建表时指定关系的主码列。 n在列级使用在列级使用PRIMARY KEY子句子句 n在表级使用在表级使用PRIMARY

33、KEY子句子句 SQL server中的实体完整性(续)中的实体完整性(续) 例例1:在学生选课数据库中,要定义:在学生选课数据库中,要定义Student表的表的Sno属属 性为主码性为主码 CREATE TABLE Student (Sno CHAR(8), Sname CHAR(20), Sage INT, CONSTRAINT PK_SNO PRIMARY KEY (Sno); 或或: CREATE TABLE Student (Sno CHAR(8) PRIMARY KEY , Sname CHAR(20), Sage INT); SQL server中的实体完整性(续)中的实体完整性

34、(续) 例例2:要在:要在SC表中定义表中定义(Sno, Cno)为主码为主码 CREATE TABLE SC (Sno CHAR(8), Cno CHAR(2), Grade INT, CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno); SQL server中的实体完整性(续)中的实体完整性(续) n用户程序对主码列进行更新操作时,系统自动用户程序对主码列进行更新操作时,系统自动 进行完整性检查进行完整性检查 n违约操作违约操作 n使主属性值为空值的操作使主属性值为空值的操作 n使主码值在表中不唯一的操作使主码值在表中不唯一的操作 n违约反应违约反应 n系统拒绝

35、此操作,从而保证了实体完整性系统拒绝此操作,从而保证了实体完整性 2、 SQL server中的参照完整性中的参照完整性 定义参照完整性定义参照完整性 nFOREIGN KEY子句:定义外码列子句:定义外码列 nREFERENCES子句:外码相应于哪个表子句:外码相应于哪个表 的主码的主码 外键外键Foreign key约束约束 n用来定义参照完整性,即维护两个表之间的一用来定义参照完整性,即维护两个表之间的一 致性。即与另一基本表的致性。即与另一基本表的primary key 建立联建立联 系系 n限制自身基本表的数据输入限制自身基本表的数据输入 n限制主关键字所在的基本表的修改限制主关键字

36、所在的基本表的修改 n学生(学号,姓名,性别,学生(学号,姓名,性别,专业号专业号,年龄),年龄) n专业(专业(专业号专业号,专业名),专业名) 外键外键Foreign key约束方法约束方法1 n1、如外部关键字只有一列,可以在它的列名 和类型后面直接用references说明它参照了基 本个基本表的某些列(主键) nReferences () n如create table 学生 (学号 char(5) primary key, 姓名 char(8), 性别 char(2), 年龄int, 专业号 char(5) References 专业(专业号) 外键外键Foreign key约束方法

37、约束方法2 n在相应列名及类型后单独列出,并指定约束名 Foreign key () References () create table 学生学生(学号学号 char(5) primary key, 姓名姓名 char(8), 性别性别 char(2), 年龄年龄int, 专业号专业号 char(5), constraint kk foreign key(专业号专业号) references 专专 业业(专业号专业号) n例 建立一个SC表,定义SNO,CNO为SC的外部键。 ncreate table sc n(sno char(5) not null foreign key refere

38、nces s(sno), ncno char(5) not null foreign key references c(cno), nscore numeric(3), nconstraint s_c_prim primary key (sno,cno); ncreate table 选课选课 n(学号学号 char(8) not null references 学生学生(学号学号), n课程号课程号 char(2) not null references 课程课程(课程号课程号), n成绩成绩 int, n primary key (学号学号,课程号课程号); SQL server中的参照完

39、整性(续)中的参照完整性(续) n这时这时“学生学生”表中外码为表中外码为“专业号专业号”,它相应,它相应 于于“专业专业”表中的主码表中的主码“专业号专业号”。 n当要当要修改修改“学生学生” 表中的表中的“专业号专业号”值时,值时, 先要检查先要检查“专业专业” 表中有无元组表中有无元组“专业号专业号” 的值与之对应的值与之对应 n若没有,系统接受这个修改操作若没有,系统接受这个修改操作 n否则,系统拒绝此操作否则,系统拒绝此操作 SQL server中的参照完整性(续)中的参照完整性(续) n当要当要删除删除“学生学生”表中某个元组时,系统要检表中某个元组时,系统要检 查查“专业专业”表

40、,若找到相应元组即将其随之删表,若找到相应元组即将其随之删 除。除。 n当要插入当要插入“学生学生”表中某个元组时,系统要检表中某个元组时,系统要检 查查“专业专业”表,先要检查表,先要检查“专业专业”表中有无元表中有无元 组的组的“专业号专业号”值与之对应值与之对应 n若没有,系统拒绝此插入操作若没有,系统拒绝此插入操作 n否则,系统接受此操作否则,系统接受此操作 3、 SQL server中用户定义的完整性中用户定义的完整性 nSQL server中定义用户完整性的两类方法中定义用户完整性的两类方法 n用用CREATE TABLE语句在建表时定义用户语句在建表时定义用户 完整性约束完整性约

41、束 n通过触发器来定义用户的完整性规则通过触发器来定义用户的完整性规则 SQL server中用户定义的完整性(续)中用户定义的完整性(续) (1) 用用CREATE TABLE语句在建表时定义用语句在建表时定义用 户完整性约束户完整性约束 可定义三类完整性约束可定义三类完整性约束 n列值非空(列值非空(NOT NULL短语)短语) n列值唯一(列值唯一(UNIQUE短语)短语) n检查列值是否满足一个布尔表达式检查列值是否满足一个布尔表达式 (CHECK短语)短语) SQL server中用户定义的完整性(续)中用户定义的完整性(续) 例例1:建立部门表:建立部门表DEPT,要求部门名称,要

42、求部门名称Dname列列 取值唯一,部门编号取值唯一,部门编号Deptno列为主码列为主码 nCREATE TABLE DEPT n(Deptno CHAR(6), nDname CHAR(9) CONSTRAINT U1 UNIQUE, nLoc CHAR(10), nCONSTRAINT PK_DEPT PRIMARY KEY (Deptno); 其中其中 CONSTRAINT U1 UNIQUE 表示约束名为表示约束名为U1, 该约束要求该约束要求Dname列值唯一。列值唯一。 SQL server中用户定义的完整性(续)中用户定义的完整性(续) 例例2: 建立学生登记表建立学生登记表S

43、tudent,要求学号在,要求学号在 900000至至999999之间,年龄之间,年龄29,性别只能是,性别只能是男男 或或女女,姓名非空,姓名非空 CREATE TABLE Student n CREATE TABLE Student111 n (Sno CHAR(5) CHECK(Sno BETWEEN 900000 AND 999999), n Sname CHAR(20) NOT NULL, n Sage INT CHECK (Sage 29), n Ssex CHAR(2), n CONSTRAINT C4 CHECK (Ssex IN(男男,女女); SQL server中用户定义

44、的完整性(续)中用户定义的完整性(续) 例例3 :建立职工表:建立职工表EMP,要求每个职工的应发工资不得超过,要求每个职工的应发工资不得超过 3000元。元。 应发工资实际上就是应发工资实际上就是实发工资列实发工资列Sal与与扣除项扣除项 Deduct之和。之和。 n CREATE TABLE EMP n (Eno char(4), n Ename CHAR(10), n Job CHAR(8), n Sal NUMeric(7,2), n Deduct numeric(7,2), n Deptno CHAR(2), n CONSTRAINT C1 CHECK(Sal + Deduct =3

45、000); SQL server中用户定义的完整性(续)中用户定义的完整性(续) (2) 通过触发器来定义用户的完整性规则通过触发器来定义用户的完整性规则 n定义其它的完整性约束时,需要用数据库触发定义其它的完整性约束时,需要用数据库触发 器(器(Trigger)来实现。)来实现。 n数据库触发器:一类靠事务驱动的特殊过程数据库触发器:一类靠事务驱动的特殊过程 n一旦由某个用户定义,任何用户对该数据的增、一旦由某个用户定义,任何用户对该数据的增、 删、改操作均由服务器自动激活相应的触发子,删、改操作均由服务器自动激活相应的触发子, 在核心层进行集中的完整性控制在核心层进行集中的完整性控制 定义

46、数据库触发器的语句 nCREATE TRIGGER on | for|AFTER|INSTEAD OF INSERT,UPDATE,DELETE AS SQL server中用户定义的完整性(续)中用户定义的完整性(续) 例例 女生考试(学号,课程号,成绩)女生考试(学号,课程号,成绩) 学生(学号,姓名,性别,年龄,班级号)学生(学号,姓名,性别,年龄,班级号) 班级(班级号,班级名,人数,专业号)班级(班级号,班级名,人数,专业号) 教师(教师号,姓名,性别,电话号码,城市,区,教师(教师号,姓名,性别,电话号码,城市,区, 街道,邮编,工龄,基本工资,养老金,公积金,系街道,邮编,工龄,

47、基本工资,养老金,公积金,系 号,职称号)号,职称号) n例例1 创建一个名为创建一个名为ins_student 的触发器,的触发器, 要求在向要求在向“学生学生”表插入元组后引发该触发器,表插入元组后引发该触发器, 检查所插入的元组中学生的班级号是否出现的检查所插入的元组中学生的班级号是否出现的 “班级班级”表中,如果在表中,如果在“班级班级”表中找不到相表中找不到相 应的班级号,则提示用户应的班级号,则提示用户“班级号输入有误班级号输入有误”, 并且回滚事务。并且回滚事务。 nCREATE TRIGGER ins_student non 学生学生 n AFTER INSERT /*触发器在

48、插入元组后被引发触发器在插入元组后被引发*/ n AS n IF (SELECT COUNT(*) n FROM 班级班级,inserted n WHERE 班级班级.班级号班级号=inserted.班级号班级号)=0 n BEGIN n PRINT 班级号输入有误!班级号输入有误! n ROLLBACK TRANSACTION n END n例例2 要求建立一个名为要求建立一个名为ins_exam 的触发器,的触发器, 在向在向“女生考试女生考试”表中插入元组后引发该触发表中插入元组后引发该触发 器,根据所插入元组的学号检查插入是否是女器,根据所插入元组的学号检查插入是否是女 生的成绩,若不是,则提示用户生的成绩,若不是,则提示用户“输入的不是输入的不是 女学生的成绩女学生的成绩”,并且回滚事务。,并且回滚事务。 nCREATE TRIGGER ins_exam non 女生考试女生考试 n AFTER INSERT /*触发器在插入元组后被引发触发器在插入元组后被引发*/ n AS n IF (SELECT COUNT(*) n FROM 学生学生,inserted n WHERE 学生学生.性别性别=女女 and 学生学生.学号学号 =inserted.学号学号)=0 n BEGI

温馨提示

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

评论

0/150

提交评论