《数据库系统概论王珊数据库完整性.pptx》由会员分享,可在线阅读,更多相关《数据库系统概论王珊数据库完整性.pptx(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、主要内容概述5.1 实体完整性5.2 参照完整性5.3 用户定义完整性5.4 完整性约束命名子句5.5 域中的完整性限制5.6 断言5.7 触发器第1页/共26页概述数据库的完整性:数据的正确性和相容性。数据的正确性:数据是符合现实世界语义、反映当前实际状况的;数据的相容性:数据库同一对象在不同关系表中的数据是符合逻辑的。数据的完整性与安全性是两个既有联系又不尽相同的概念:(1)完整性是为了防止数据库中存在不符合语义的数据,即防止数据库中存在不正确的数据。完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。(2)安全性是保护数据防止恶意破坏和非法存取。安全性控制的对象是非
2、法用户和非法操作,防止他们对数据库的数据进行非法存取。第2页/共26页概述为维护数据的完整性,DBMS必须具备如下对应功能:(1)提供定义完整性约束条件的机制 完整性约束条件也称完整性规则,是数据库中的数据必须满足的语义约束条件。它表达了给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。第3页/共26页概述 (2)提供完整性检查的方法 数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。通常在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作后的数据库中
3、的数据是否违背了完整性约束条件。第4页/共26页概述 (3)进行违约处理 数据库管理系统若发现用户的操作违背了完整性约束条件,则将采取一定的动作或措施,如拒绝执行该操作或级联执行其他操作,进行违约处理以保证数据的完整性。第5页/共26页概述关系数据库的三类完整性约束条件:(1)实体完整性约束条件 (2)参照完整性约束条件 (3)用户定义完整性约束条件第6页/共26页5.1 实体完整性关系模型中的实体完整性是在CREATE TABLE 中用PRIMARY KEY定义。对单属性构成的码有两种说明方法 (1)定义为列级约束条件;(2)定义为表级约束条件。对多属性构成的码只有一种说明方法,即定义为表级
4、约束条件。举例说明第7页/共26页5.1 实体完整性【例5.1】将Student表中的Sno属性定义为码。CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,/*列级定义主码*/Sname CHAR(20)NOT NULL,Ssex CHAR(2),Ssage SMALLINT,Sdept CHAR(20));第8页/共26页5.1 实体完整性【例5.1】将Student表中的Sno属性定义为码。或者也可以 CREATE TABLE Student (Sno CHAR(9),Sname CHAR(20)NOT NULL,Ssex CHAR(2),Ssage
5、 SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno),/*表级定义主码*/);第9页/共26页5.1 实体完整性【例5.2】将SC表中的Sno、Cno属性组定义为码。只能用表级定义 CREATE TABLE Student (Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY (Sno,Cno),/*表级定义主码*/);第10页/共26页5.1 实体完整性用PRIMARY KEY短语定义了关系的主码后,每当用户对基本表插入一条记录或对主码列进行更新操作时,关系数据库管理系统即对实体完
6、整性规则进行自动检查,包括:(1)检查主码是否唯一,若不唯一则拒绝插入或修改;(2)检查主码的各个属性是否为空,只要有一个为空 就拒绝插入或修改。从而保证了实体完整性。检查记录中的主码值是否唯一的方法:(1)全表扫描 (2)根据主码建立索引第11页/共26页5.2 参照完整性关系模型中的参照完整性是在CREATE TABLE 中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照那些表的主码。举例说明第12页/共26页5.2 参照完整性【例5.3】将SC表中的参照完整性。CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHA
7、R(4)NOT NULL,Grade SMALLINT,PRIMARY KEY (Sno,Cno),/*表级定义外码*/FOREIGN KEY(Sno)REFERENCES Student(Sno),/*表级定义外码*/FOREIGN KEY(Cno)REFERENCES Course(Cno)/*表级定义外码*/);第13页/共26页5.2 参照完整性参照完整性将多个表的相应元组联系起来。因此,对被参照表和参照表进行增、删、改等操作时,可能会破坏参照完整性,因此系统必须进行检查以保证这多个表的相容性。当发生破坏参照完整性的违约情况时,系统通常做如下违约处理:(1)拒绝执行。通常为默认处理策略
8、。(2)级联执行。当删除或修改被参照表的元组导致与参照表的不一致时,删除或修改参照表中所有导致不一致的元组。(3)设置为空值。对于参照完整性,除了应定义外码,还应定义外码列是否允许为空值。第14页/共26页5.2 参照完整性一般而言,当对参照表和被参照表的操作违反了参照完整性约束时,系统选用默认策略,即拒绝执行。如果想让系统采用其他违约处理策略,则必须在创建参照表时,显式地加以对应说明。具体参见例5.4。第15页/共26页5.3 用户定义的完整性用户定义的完整性是针对某些具体应用的数据规定必须的满足某些语义要求。属性上的约束条件 1、属性上的约束条件的定义 在CREATE TABLE 中定义属
9、性的同时,可以根据应用要求定义属性上的约束条.件,即属性值的限制,包括:(1)列值非空(NOT NULL)(2)列值唯一(UNIQUE)(3)检查列值是否满足一个条件表达 式(CHECK短语)第16页/共26页5.3 用户定义的完整性【例5.5】将SC表中,说明Sno、Cno、Grade属性不允许为空值。CREATE TABLE SC (Sno CHAR(9)NOT NULL,/*Sno不能为空*/Cno CHAR(4)NOT NULL,/*Cno不能为空*/Grade SMALLINT NOT NULL,/*Grade不能为空*/PRIMARY KEY (Sno,Cno),/*表级定义外码*
10、/FOREIGN KEY(Sno)REFERENCES Student(Sno),/*表级定义外码*/FOREIGN KEY(Cno)REFERENCES Course(Cno)/*表级定义外码*/);第17页/共26页5.3 用户定义的完整性【例5.6】建议部门表DEPT,要求部门部门名称Dname唯一,部门编号Deptno为主码。CREATE TABLE DEPT (Deptno NUMERIC(2),Dname CHAR(9)UNIQUE NOT NULL,/*Dname取值唯一且不能为空*/Location CHAR(10),PRIMARY KEY (Deptno),/*表级定义主码*
11、/);第18页/共26页5.3 用户定义的完整性【例5.7】Student表的Ssex只允许取“男”或“女”。CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,/*列级定义主码*/Sname CHAR(20)NOT NULL,Ssex CHAR(2)CHECK(Ssex IN(男,女),/*Ssex的值只允许取男或女*/Ssage SMALLINT,Sdept CHAR(20));第19页/共26页5.3 用户定义的完整性【例5.8】SC表中Grade的值要求在0到100之间。CREATE TABLE SC (Sno CHAR(9)NOT NULL,/*
12、Sno不能为空*/Cno CHAR(4)NOT NULL,/*Cno不能为空*/Grade SMALLINT NOT NULL,/*Grade不能为空*/PRIMARY KEY (Sno,Cno),/*表级定义外码*/CHECK (Grade=0 AND Grade=100),/*Grade取值范围为0到100*/FOREIGN KEY(Sno)REFERENCES Student(Sno),/*表级定义外码*/FOREIGN KEY(Cno)REFERENCES Course(Cno)/*表级定义外码*/);第20页/共26页5.3 用户定义的完整性属性上的约束条件 1、属性上的约束条件的定
13、义 2、属性上约束条件的检查和违约处理 当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,若不满足,则操作被拒绝执行。第21页/共26页5.3 用户定义的完整性元组上的约束条件 1、元组上约束条件的定义 类似的,在CREATE TABLE 中用CHECK短语定义元组上的约束条件,即元组级的限制。与属性值限制相比,元组级限制可以设置不同属性之间的取值的相互约束条件。第22页/共26页5.3 用户定义的完整性【例5.9】当Student表的Ssex取值为“男”时,其名字不能以Ms.打头。CREATE TABLE Student (Sno CHAR(9)PRIMA
14、RY KEY,/*列级定义主码*/Sname CHAR(20)NOT NULL,Ssex CHAR(2)CHECK(Ssex IN(男,女),/*Ssex的值只允许取男或女*/Ssage SMALLINT,Sdept CHAR(20),CHECK (Ssex=女 OR Sname NOT LIKE Ms.%),/*定义元组中Sname和Ssex两个属性值之间的约束*/);第23页/共26页5.3 用户定义的完整性元组上的约束条件 1、元组上约束条件的定义 类似的,在CREATE TABLE 中用CHECK短语定义元组上的约束条件,即元组级的限制。与属性值限制相比,元组级限制可以设置不同属性之间的取值的相互约束条件。2、元组上约束条件的检查和违约处理 当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被满足,若不满足,则操作被拒绝执行。第24页/共26页5.4 完整性约束命名子句CONSTRAINT修改表中的完整性限制第25页/共26页感谢您的观看!第26页/共26页