数据库系统概论第5章数据库完整性

上传人:xuey****n398 文档编号:245167420 上传时间:2024-10-07 格式:PPT 页数:27 大小:255.50KB
返回 下载 相关 举报
数据库系统概论第5章数据库完整性_第1页
第1页 / 共27页
数据库系统概论第5章数据库完整性_第2页
第2页 / 共27页
数据库系统概论第5章数据库完整性_第3页
第3页 / 共27页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第5章 数据库完整性,5.1完整性约束条件,5.2完整性控制,1,数据库的完整性,正确性,相容性,数据库完整性的实现:,(1)定义完整性约束条件,(2)完整性检查,(3),违约反应,10.1完整性约束条件,完整性约束条件作用的对象:,关系 元组 列,列约束,:是指列的类型、取值范围、精度、排序等约束.,元组约束,:是指元组中各个字段间的联系约束.,关系约束,:是指若干元组间、关系集合上以及关系之间的联系约束.,2,完整性约束条件作用对象的状态:,静态 动态,静态约束,:是指数据库每一确定状态时的数据对象所应满,足的约束条件,它是反映数据库状态合理性的约束.,动态约束,:是指数据库从一种状态转变为另一种状态时,新、,旧值之间所满足的约束条件,它是反映数据库状,态变迁的约束.,完整性约束条件分类:,列,元组,关系,动态,静态,1,2,3,4,5,6,1:静态列级约束,2:静态元组约束,3:静态关系约束,4:动态列级约束,5:动态元组约束,6:动态关系约束,3,一、静态列级约束,静态列级约束,:是指对一个列的取值域的说明。,包括以下几个方面:,(1)对数据类型的约束(,数据的类型、长度、单位、精度等,),(2)对数据格式的约束,(3)对取值范围或取值集合的约束,(4)对空值的约束,(5)其他约束,二、动态列级约束,动态列级约束:,是指修改列定义或列值时应满足的约束条件.,包括以下几个方面:,(1)修改列定义时的约束,(2)修改列值时的约束,4,三、静态元组约束,静态元组约束,:是指元组的各个列之间的约束关系.,四、动态元组级约束,动态元组级约束,:是指修改元组的值时元组中各个列之间,的约束条件.,五、静态关系约束,静态关系约束,:是指一个关系的各个元组之间或者若干关系,之间存在的约束条件.,包括以下几个方面:,(1)实体完整性约束,(2)参照完整性约束,(3)函数依赖约束,(4)统计约束,5,六、动态关系约束,动态关系约束:,是指加在关系变化前后状态上的约束条件.,总结:,粒度,状态,列级,元组级,关系级,静态,动态,列定义,类型,格式,值域,空值,元组值应满足的条件,实体完整性约束,参照完整性约束,函数依赖约束,统计约束,改变列定义或列值,元组新旧值之间应满足的约束条件,关系新旧状态间应满足的约束条件,6,10.2完整性控制,完整性控制机制的功能:,(1)定义功能,(2)检查功能,(3)如果发现用户的操作请求使数据违背了完整性约束,条件,则采取一定的动作来保证数据的完整性.,完整性规则的表示:,五元组(D,O,A,C,P),D(Data):,指约束作用的数据对象,O(Operation):,触发完整性检查的数据库操作,A(Assertion):,数据对象必须满足的断言或语义约束,C(Condition):,选择A作用的数据对象值的谓词,P(Procedure):,违反完整性规则时触发的过程,立即执行检查,延迟执行检查,7,例子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不能小于1000,C:职称=教授,P:拒绝执行该操作,8,实现参照完整性要考虑的几个问题:,1.外码能否接受空值的问题,学生(,学号,姓名,性别,专业号,年龄),专业(,专业号,专业名),外码,例子1:,外码取空值表示该学生尚未分配到任何具体的专业学习.,与应用环境的语义相符,因此,外码可取空值.,例子2:,学生(,学号,姓名,性别,专业号,年龄),课程(,课程号,课程名,学分),选修(,学号,课程号,成绩),外码(学号)取空值表示一个不存在的学生选了某门课程,成绩记录在成绩列中.,与应用环境的语义不相符,因此,外码不能取空值.,9,2.在被参照关系中删除元组的问题,例子:学生(,学号,姓名,性别,专业号,年龄),选修(,学号,课程号,成绩),学号,姓名 性别 专业号 年龄,95001 李勇 男 CS 20,.,被参照关系,学号 课程号 成绩,95001 1 78,95001 3 80,95001 4 89,三种策略:,(1)级联删除,(2)受限删除,(3)置空值删除,在学生关系中删除元组(95001,李勇,男,CS,20),10,例子:,A(A#,AN),S(S#,SN,A#,SA),在A关系中删除元组(001,物理)?,三种策略:,(1)级联删除,(2),受限删除,(3),置空值删除,11,3.在参照关系中插入元组时的问题,例子:学生(,学号,姓名,性别,专业号,年龄),选修(,学号,课程号,成绩),参照关系,学号,姓名 性别 专业号 年龄,95001 李勇 男 CS 20,.,学号 课程号 成绩,95001 1 78,95001 3 80,95001 4 89,两种策略:,(1),受限插入,(2)递归插入,在选修关系中插入元组(99001,1,90),12,例子:,S(S#,SN,A#,SA),A(A#,AN),在S关系中插入元组(95001,李勇,031,20)?,两种策略:,(1),受限插入,(2)递归插入,13,4.修改关系中的主码,不允许修改主码,允许修改主码,(1)修改被参照关系的主码,例子:学生(,学号,姓名,性别,专业号,年龄),选修(,学号,课程号,成绩),学号,姓名 性别 专业号 年龄,95001 李勇 男 CS 20,.,学号 课程号 成绩,95001 1 78,95001 3 80,95001 4 89,被参照关系,在学生关系中修改元组(95001,李勇,男,CS,20)的学号为960123,三种策略:,(1),级联修改,(2)受限修改,(3)置空值修改,14,例子:,S(S#,SN,A#,SA),A(A#,AN),在A关系中修改元组(001,物理)中的主码001为005?,三种策略:,(1),级联修改,(2)受限修改,(3)置空值修改,15,(2)修改参照关系的外码,例子:学生(,学号,姓名,性别,专业号,年龄),选修(,学号,课程号,成绩),参照关系,学号,姓名 性别 专业号 年龄,95001 李勇 男 CS 20,.,学号 课程号 成绩,95001 1 78,95001 3 80,95001 4 89,在选修关系中元组(95001,1,90)修改为(99001,1,90),两种策略:,(1),受限修改,(2)递归修改,16,例子:,S(S#,SN,A#,SA),A(A#,AN),在S关系中修改元组(95001,李勇,001,20)的A#改为030?,两种策略:,(1),受限修改,(2)递归修改,17,10.3 SQL Server的完整性,一、Oracle中的实体完整性,例1:在学生选课数据库中,要定义Student表的Sno属性为主码,CREATE TABLE Student,(Sno NUMBER(8),Sname VARCHAR(20),Sage NUMBER(20),CONSTRAINT,PK_SNO,PRIMARY KEY(Sno),);,注意:,(,PK_SNO,是此主码约束名),或:,CREATE TABLE Student,(Sno NUMBER(8),PRIMARY KEY,Sname VARCHAR(20),Sage NUMBER(20);,PRIMARY KEY子句,供用户在建表时指定关系的主码列。,18,例2:要在SC表中定义(Sno,Cno)为主码,CREATE TABLE SC,(Sno NUMBER(8),Cno NUMBER(2),Grade NUMBER(2),CONSTRAINT,PK_SC,PRIMARY KEY(Sno,Cno),);,二、SQL Server中的参照完整性,定义参照完整性,FOREIGN KEY子句:定义外码列,REFERENCES子句:外码相应于哪个表的主码,ON DELETE|UPDATE CASCADE子语:,在删除修改被参照关系的元组时,同时删除修改参照关系中 外码值等于被参照关系的元组中主码值的元组,19,例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),);,Deptno NUMBER(2),CONSTRAINT,FK_DEPTNO,FOREIGN KEY,REFERENCES DEPT(Deptno),CONSTRAINT FK_DEPTNO,FOREIGN KEY(Deptno),REFERENCES DEPT(Deptno),ON DELETE CASCADE,20,CREATE TABLE SC(,Sno char(7),Cno char(10),Grade tinyint,CHECK(Grade=0 and Grade=100),PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),FOREIGN KEY(Cno)REFERENCES Course(Cno),),列名,说明,数据类型,约束,Sno,学号,字符串,长度为7,主码,引用Student的外码,Cno,课程名,字符串,长度为10,主码,引用Course的外码,Grade,成绩,整数,取值0100,例子2:sc表结构,21,三、SQL Server中用户定义的完整性,可定义三类完整性约束:,列值非空(NOT NULL短语),列值唯一(UNIQUE短语),检查列值是否满足一个布尔表达式(CHECK短语),例1:建立部门表DEPT,要求部门名称Dname列,取值唯一,部门编号Deptno列为主码,CREATE TABLE DEPT,(Deptno NUMBER,Dname VARCHAR(9),CONSTRAINT U1,UNIQUE,Loc VARCHAR(10),CONSTRAINT PK_DEPT,PRIMARY KEY(Deptno),);,22,例2:建立学生登记表Student,要求学号在90000至99999之,间,年龄29,性别只能是男或女,姓名非空.,CREATE TABLE Student,(Sno NUMBER(5),CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999),Sname VARCHAR(20),CONSTRAINT C2 NOT NULL,Sage NUMBER(3),CONSTRAINT C3 CHECK (Sage 29),Ssex VARCHAR(2),CONSTRAINT C4 CHECK (Ssex IN(男,女),);,23,例3:建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。,CREATE TABLE EMP,(Eno NUMBER(4),Ename VARCHAR(10),Job VARCHAR(8),Sal NUMBER(7,2),Deduct NUMBER(7,2),Deptno NUMBER(2),CONSTRAINTS C1 CHECK(Sal+Deduct=4000,如果4000,自动改为4000.,Create trigger in-up-sal,On teacher
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!