数据库技术讲义第10章数据库完整性

上传人:j****9 文档编号:57150305 上传时间:2018-10-19 格式:PPT 页数:25 大小:186.50KB
返回 下载 相关 举报
数据库技术讲义第10章数据库完整性_第1页
第1页 / 共25页
数据库技术讲义第10章数据库完整性_第2页
第2页 / 共25页
数据库技术讲义第10章数据库完整性_第3页
第3页 / 共25页
数据库技术讲义第10章数据库完整性_第4页
第4页 / 共25页
数据库技术讲义第10章数据库完整性_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数据库技术讲义第10章数据库完整性》由会员分享,可在线阅读,更多相关《数据库技术讲义第10章数据库完整性(25页珍藏版)》请在金锄头文库上搜索。

1、第十章 数据库完整性,前言,数据库的完整性是指数据的正确性和相容性。例如,学生的学号必须唯一;性别只能是男或女;本科学生年龄的取值范围为1430等。数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。 完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。,前言,为了维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,他们作为模式的一部分存入数据库中。而DBMS中检查数据是否满足完整性

2、条件的机制称为完整性检查。,10.1 完整性约束条件,完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。完整性约束条件作用的对象可以是关系、元组、列三种。其中列约束主要是列的类型、取值范围、精度、排序等约束条件。元组的约束是元组中各个字段间的联系的约束。关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。,10.1 完整性约束条件,完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。所谓静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它时反映数据库状态合理性的约束,这是最重要的一类完整性约束。 动态约束时指数据库从一种状态变为

3、另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。,10.1 完整性约束条件,一、静态列级约束 静态列级约束是对一个列的取值域的说明,这是最常用也最容易实现的一类完整性约束,包括一下几个方面: 1.对数据类型的约束(包括数据的类型、长度、单位、精度等) 2.对数据格式的约束例如,规定学号的前两位表示入学年份,中间两位表示系的编号,后三位为顺序编号。出生日期的格式为YY.MM.DD。应该用触发器实现。,10.1 完整性约束条件,3. 对取值范围或取值集合的约束这是在创建表的时候定义约束。 4. 对空值的约束空值表示未定义或未知的值。NOT NULL约束,不定义表示可以为

4、空。alter table tablenamealter column colname datatype not null | null,10.1 完整性约束条件,5.其他约束例如关于列的排序说明,组合列等。CREATE TABLE TEMP(INT THELOW,INT THEHIGH,AVER AS (THELOW + THEHIGH)/2),10.1 完整性约束条件,二、静态元组约束。一个元组是由若干个列值组成的,静态元组约束就是规定元组的各个列之间的约束关系。例如订货关系中包含发货量、定货量等列,规定发货量不得超过定货量;教师关系中包含职称、工资等列,规定教授的工资不得低于1000元。

5、,10.1 完整性约束条件,三、静态关系约束 在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:1.实体完整性约束例如主键约束,unique约束主码属性不能取空值,不能重复。创建一个主码的时候默认建立一个索引。一个属性作为主码可以直接写在属性定义后,当多个属性联合作为主码的时候必须放在表级定义。,10.1 完整性约束条件,CREATE TABLE SC(SNO CHAR(4) NOT NULL,CNO CHAR(4) NOT NULLGRADE INT,PRIMARY KEY(SNO,CNO);,10.1 完整性约束条件,可使用 UNIQUE 约束确保在非主

6、键列中不输入重复值。尽管 UNIQUE 约束和 PRIMARY KEY约束都强制唯一性,但在强制下面的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束: 非主键的一列或列组合。 一个表可以定义多个 UNIQUE 约束,而只能定义一个 PRIMARY KEY 约束。允许空值的列。允许空值的列上可以定义 UNIQUE 约束,而不能定义 PRIMARY KEY 约束。,10.1 完整性约束条件,如果在主码属性上没有索引,系统为了查找具有相同主码的值必须搜索整个关系,这个过程对于一个大型数据库是十分耗时的,甚至是不可行的。在SQL SERVER中设置主码约束的时候默认将建立一个聚

7、簇索引,而UNIQUE默认是普通索引。在执行插入和修改操作的自动检查约束。删除不处理。,10.1 完整性约束条件,2.参照完整性约束FOREIGN KEY (sno) REFERENCES s(sno) ON DELETE NO ACTION前面说过外码引用必须是另一个表的主键。保证外码的取值必然是引用主码肯定存在的值。ON DELETE和ON UPDATENO ACTION 指定删除因错误而失败。CASCADE 指定还将删除包含指向已删除行的外键的所有行。NO ACTION 和 CASCADE 选项。,10.1 完整性约束条件,create table sc(sno char(4) fore

8、ign key references s(sno),cno char(4),grade int);alter table sc addconstraint cno references c(cno),10.1 完整性约束条件,3.函数依赖约束。4.统计约束。即字段值与关系中多个元组的统计值之间的约束关系。例如规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。这里本部门职工的平均工资是一个统计值。,10.1 完整性约束条件,四、动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:1.修改列定义时的约束例如,将允许空值的列改为不允许空值

9、时,如果该列目前已存在空值,则拒绝这类修改。ALTER TABLE TABLENAME WITH NOCHECK2.修改列值时的约束。例如职工的工资不得低于原来的工资。,10.1 完整性约束条件,五、动态元组约束动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。例如职工工资调整时新工资不得低于原工资+工龄*1.5等。六、动态关系约束是加在关系变化后状态上的限制,例如事物一致性、原子性等。,10.2 完整性控制,DBMS的完整性控制机制应具有三个方面的功能:定义功能。检查功能如果发现用户的操作请求使数据违背了完整性约 束条件,则采取一定的动作来保证数据的完整性。检查是否违背完整

10、性约束的时机通常是在一条语句执行完后立即检查,称这类约束为立即执行约束。有时完整性检查需要延迟到整个事物执行结束后再进行,检查方可正确提交,称这类约束为延迟执行约束。例如转帐,从A转出后钱数处于不平衡状态,只有转入B后才能重新平衡。,10.2 完整性控制,如果发现用户操作请求违背了完整性约束条件,系统将拒绝该操作,但对于延迟执行的约束,系统将拒绝整个事物。一条完整性规则可以用一个五元组(D,O,A,C,P)表示:D(DATE)约束作用的数据对象O(OPERATION)触发完整性检查的数据库操作A(ASSERTION)数据库对象必须满足的断言或语义约束C(Condition)选择A作用的数据对象

11、值的谓词P(PROCEDURE)违反约束规则时触发的过程,10.2 完整性控制,在关系系统中,最重要的约束是实体完整性和参照完整性。下面详细调论一下参照完整性相关的几个问题:1.外码能否接受空值。根据应用的不同采取不同策略。例如职工部门则可以为空表示没有分配部门。学生选课的学号不能为空,这样没有意义。,10.2 完整性控制,2.在被参照关系中删除元组的问题。有三种不同策略。级联删除、受限删除和置空值删除。采取何种策略应看具体应用。3.在参照关系中插入元组时的问题。分为受限插入和递归插入。4.修改关系中主码的问题。分为不允许修改和允许修改。修改主码后的操作也有三种:拒绝修改、级联修改和置空。,1

12、0.3 Oracle的完整性,Oracle中的实体完整性用 PRIMARY KEY 语句定义关系的主码,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查,凡操作使主码值为空值或使主码值在表中不唯一,系统拒绝此操作,从而保证了实体完整性。,10.3 Oracle的完整性,Oracle 中的参照完整性 0racle 的 CREATE TABLE 语句也可以定义参照完整性规则,即用 FOREIGN KEY 子句定义哪些列为外码列,用 REFERENCES 子句指明这些外码相应于哪个表的主码,用 ON DELETE CASCADE 子语指明在删除被参照关系的元组时,同时删除参照关系中相应的元组。,10.3 Oracle的完整性,Oracle 中用户定义的完整性 除实体完整性和参照完整性外,应用系统中往往还需要定义与应用有关的完整性限制。例如:要求某一列的值不能取空值,要在表中是唯一的,要在某个取值范围中等。Oracle 允许用户在建表时定义下列完整性约束: 列值非空(NOT NULL 短语 列值唯一( UNIQUE 短语) 检查列值是否满足一个布尔表达式(CHECK 短语),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号