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

下载本文档

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

文档简介

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

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

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

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

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

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

7、RVER中设置主码约束的时候默认将建立一个聚簇索引,而UNIQUE默认是普通索引。v在执行插入和修改操作的自动检查约束。删除不处理。 10.1 完整性约束条件v2.参照完整性约束vFOREIGN KEY (sno) REFERENCES s(sno) ON DELETE NO ACTIONv前面说过外码引用必须是另一个表的主键。保证外码的取值必然是引用主码肯定存在的值。vON DELETE和ON UPDATEvNO ACTION 指定删除因错误而失败。vCASCADE 指定还将删除包含指向已删除行的外键的所有行。vNO ACTION 和 CASCADE 选项。 10.1 完整性约束条件vcre

8、ate table scv(sno char(4) foreign key references s(sno),v cno char(4),v grade int);valter table sc addvconstraint cno references c(cno) 10.1 完整性约束条件v3.函数依赖约束。v4.统计约束。即字段值与关系中多个元组的统计值之间的约束关系。例如规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。这里本部门职工的平均工资是一个统计值。 10.1 完整性约束条件v 四、动态列级约束v动态列级约束是修改列定义或列值时应满足的约束

9、条件,包括下面两方面:v1.修改列定义时的约束v例如,将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这类修改。vALTER TABLE TABLENAME WITH NOCHECKv2.修改列值时的约束。v例如职工的工资不得低于原来的工资。 10.1 完整性约束条件v 五、动态元组约束v动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。例如职工工资调整时新工资不得低于原工资+工龄*1.5等。v 六、动态关系约束是加在关系变化后状态上的限制,例如事物一致性、原子性等。10.2 完整性控制vDBMS的完整性控制机制应具有三个方面的功能:v定义功能。v检查功能v如果

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

11、据库操作v A(ASSERTION)数据库对象必须满足的断言或语义约束v C(Condition)选择A作用的数据对象值的谓词v P(PROCEDURE)违反约束规则时触发的过程 10.2 完整性控制v在关系系统中,最重要的约束是实体完整性和参照完整性。v下面详细调论一下参照完整性相关的几个问题:v1.外码能否接受空值。v根据应用的不同采取不同策略。例如职工部门则可以为空表示没有分配部门。学生选课的学号不能为空,这样没有意义。10.2 完整性控制v2.在被参照关系中删除元组的问题。有三种不同策略。v级联删除、受限删除和置空值删除。采取何种策略应看具体应用。v3.在参照关系中插入元组时的问题。v

12、分为受限插入和递归插入。v4.修改关系中主码的问题。v分为不允许修改和允许修改。修改主码后的操作也有三种:拒绝修改、级联修改和置空。 10.3 Oracle的完整性vOracle中的实体完整性 用 PRIMARY KEY 语句定义关系的主码,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查,凡操作使主码值为空值或使主码值在表中不唯一,系统拒绝此操作,从而保证了实体完整性。10.3 Oracle的完整性vOracle 中的参照完整性0racle 的 CREATE TABLE 语句也可以定义参照完整性规则,即用 FOREIGN KEY 子句定义哪些列为外码列,用 REFERENCES 子句指明这些外码相应于哪个表的主码,用 ON DELETE CASCADE 子语指明在删除被参照关系的元组时,同时删除参照关系中相应的元

温馨提示

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

评论

0/150

提交评论