数据库原理第五章 数据库完整性.ppt
《数据库原理第五章 数据库完整性.ppt》由会员分享,可在线阅读,更多相关《数据库原理第五章 数据库完整性.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库系统概论数据库系统概论An Introduction to Database System第五章第五章 数据库完整性数据库完整性数据库完整性数据库完整性n数据库的完整性n数据的正确性和相容性n数据的完整性和安全性是两个不同概念n数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据防范对象:不合语义的、不正确的数据n数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作数据库完整性数据库完整性(续续)为维护数据库的完整性,DBMS必须:n1.提供定义完整性约束条件的机制n2.提供完整性检查的方法n3.违约处理第五章第五章 数据库完整性数据库
2、完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结5.1 实体完整性实体完整性n5.1.1 实体完整性定义实体完整性定义n5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理5.1.1 实体完整性定义实体完整性定义n关系模型的实体完整性nCREATE TABLE中用PRIMARY KEY定义n单属性构成的码有两种说明方法 n定义为列级约束条件n定义为表级约束条件n对多个属性构成的码只有一种说明方法n定义为表级约束条
3、件 实体完整性定义实体完整性定义(续续)例1 将Student表中的Sno属性定义为码 (1)在列级定义主码在列级定义主码 CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,Sname CHAR(20)NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20);实体完整性定义实体完整性定义(续续)(2)在表级定义主码在表级定义主码 CREATE TABLE Student (Sno CHAR(9),Sname CHAR(20)NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CH
4、AR(20),PRIMARY KEY(Sno);实体完整性定义实体完整性定义(续续)例2将SC表中的Sno,Cno属性组定义为码 CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno)/*只能在表级定义主码*/);5.1 实体完整性实体完整性n5.1.1 实体完整性定义实体完整性定义n5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理n插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动
5、进行检查。包括:n1.检查主码值是否唯一,如果不唯一则拒绝插入或修改n2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改实体完整性检查和违约处理实体完整性检查和违约处理(续续)n检查记录中主码值是否唯一的一种方法是进行全表扫描实体完整性检查和违约处理实体完整性检查和违约处理(续续)n索引 第五章第五章 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结5.2 参照完整性参照完整性n5.2.1
6、参照完整性定义参照完整性定义n5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理5.2.1 参照完整性定义参照完整性定义n关系模型的参照完整性定义n在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码n用REFERENCES短语指明这些外码参照哪些表的主码 参照完整性定义参照完整性定义(续续)例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码 例3 定义SC中的参照完整性 CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHAR
7、(4)NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno),/*在表级定义实体完整性*/FOREIGN KEY(Sno)REFERENCES Student(Sno),/*在表级定义参照完整性*/FOREIGN KEY(Cno)REFERENCES Course(Cno)/*在表级定义参照完整性*/);5.2 参照完整性参照完整性n5.2.1 参照完整性定义参照完整性定义n5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理参照完整性检查和违约处理参照完整性检查和违约处理可能破坏参照完整性的情况及违约处理被参照表(例如Student)参照表(例如SC
8、)违约处理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整性拒绝/级连删除/设置为空值修改主码值 可能破坏参照完整性拒绝/级连修改/设置为空值违约处理违约处理n参照完整性违约处理n1.拒绝(NO ACTION)执行n默认策略n2.级联(CASCADE)操作n3.设置为空值(SET-NULL)n对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值违约处理违约处理(续续)例4 显式说明参照完整性的违约处理示例 CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLI
9、NT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno)ON DELETE CASCADE /*级联删除SC表中相应的元组*/ON UPDATE CASCADE,/*级联更新SC表中相应的元组*/FOREIGN KEY(Cno)REFERENCES Course(Cno)ON DELETE NO ACTION /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/ON UPDATE CASCADE /*当更新course表中的cno时,级联更新SC表中相应的元组*/);第五章第五章 数据库完整性数据库完整性5.
10、1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名字句完整性约束命名字句*5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结5.3 用户定义的完整性用户定义的完整性n用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求 nRDBMS提供,而不必由应用程序承担5.3 用户定义的完整性用户定义的完整性n5.3.1 属性上的约束条件的定义属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义元组上的约束条件的定义 n5.3.
11、4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理5.3.1 属性上的约束条件的定义属性上的约束条件的定义nCREATE TABLE时定义n列值非空(NOT NULL)n列值唯一(UNIQUE)n检查列值是否满足一个布尔表达式(CHECK)属性上的约束条件的定义属性上的约束条件的定义(续续)n1.不允许取空值 例5 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATE TABLE SC (Sno CHAR(9)NOT NULL,Cno CHAR(4)NOT NULL,Grade SMALLINT NOT NULL,PRIMARY KEY(Sno,Cno),/
12、*如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了*/);属性上的约束条件的定义属性上的约束条件的定义(续续)n2.列值唯一 例6 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码 CREATE TABLE DEPT (Deptno NUMERIC(2),Dname CHAR(9)UNIQUE,/*要求Dname列值唯一*/Location CHAR(10),PRIMARY KEY(Deptno);属性上的约束条件的定义属性上的约束条件的定义(续续)n3.用CHECK短语指定列值应该满足的条件例7 Student
13、表的Ssex只允许取“男”或“女”。CREATE TABLE Student (Sno CHAR(9)PRIMARY KEY,Sname CHAR(8)NOT NULL,Ssex CHAR(2)CHECK(Ssex IN(男,女),/*性别属性Ssex只允许取男或女*/Sage SMALLINT,Sdept CHAR(20);5.3 用户定义的完整性用户定义的完整性n5.3.1 属性上的约束条件的定义属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义元组上的约束条件的定义 n5.3.4元组上的约束条件检查和违约
14、处理元组上的约束条件检查和违约处理5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足n如果不满足则操作被拒绝执行 5.3 用户定义的完整性用户定义的完整性n5.3.1 属性上的约束条件的定义属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义元组上的约束条件的定义 n5.3.4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理5.3.3 元组上的约束条件的定义元组上的约束条件的定义n在CREATE TABLE时可以
15、用CHECK短语定义元组上的约束条件,即元组级的限制n同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件 元组上的约束条件的定义元组上的约束条件的定义(续续)例9 当学生的性别是男时,其名字不能以Ms.打头。CREATE TABLE Student (Sno CHAR(9),Sname CHAR(8)NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY(Sno),CHECK(Ssex=女女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/)
16、;性别是女性的元组都能通过该项检查,因为Ssex=女成立;当性别是男性时,要通过检查则名字一定不能以Ms.打头5.3 用户定义的完整性用户定义的完整性n5.3.1 属性上的约束条件的定义属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义元组上的约束条件的定义 n5.3.4 元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理5.3.4 元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足n如果不满足则操作被拒绝执行 第五章第五章
17、 数据库完整性数据库完整性5.1 实体完整性实体完整性5.2 参照完整性参照完整性5.3 用户定义的完整性用户定义的完整性5.4 完整性约束命名子句完整性约束命名子句*5.5 域中的完整性限制域中的完整性限制5.6 触发器触发器5.7 小结小结5.4 完整性约束命名子句完整性约束命名子句nCONSTRAINT 约束CONSTRAINT PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语完整性约束命名子句完整性约束命名子句(续续)例10 建立学生登记表Student,要求学号在9000099999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATE TA
18、BLE Student (Sno NUMERIC(6)CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999),Sname CHAR(20)CONSTRAINT C2 NOT NULL,Sage NUMERIC(3)CONSTRAINT C3 CHECK(Sage 30),Ssex CHAR(2)CONSTRAINT C4 CHECK(Ssex IN(男,女),CONSTRAINT StudentKey PRIMARY KEY(Sno);在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约
19、束。完整性约束命名子句完整性约束命名子句(续续)n2.修改表中的完整性限制修改表中的完整性限制n使用ALTER TABLE语句修改表中的完整性限制完整性约束命名子句完整性约束命名子句(续续)例13 修改表Student中的约束条件,要求学号改为在900000999999之间,年龄由小于30改为小于40n可以先删除原来的约束条件,再增加新的约束条件 ALTER TABLE Student DROP CONSTRAINT C1;ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 900000 AND 999999),ALTER TABLE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库原理第五章 数据库完整性 数据库 原理 第五 完整性
限制150内