数据库原理第五章数据库完整性

上传人:宝路 文档编号:46828457 上传时间:2018-06-28 格式:PPT 页数:73 大小:851.43KB
返回 下载 相关 举报
数据库原理第五章数据库完整性_第1页
第1页 / 共73页
数据库原理第五章数据库完整性_第2页
第2页 / 共73页
数据库原理第五章数据库完整性_第3页
第3页 / 共73页
数据库原理第五章数据库完整性_第4页
第4页 / 共73页
数据库原理第五章数据库完整性_第5页
第5页 / 共73页
点击查看更多>>
资源描述

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

1、数据库系统概论 An Introduction to Database System第五章 数据库完整性数据库完整性n数据库的完整性n数据的正确性和相容性n数据的完整性和安全性是两个不同概念n数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据防范对象:不合语义的、不正确的数据n数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作数据库完整性(续)为维护数据库的完整性,DBMS必须:n1.提供定义完整性约束条件的机制n2.提供完整性检查的方法n3.违约处理第五章 数据库完整性5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4

2、完整性约束命名字句*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定义为表级约束条件 实体完整性定义(续)例1 将Student表中的Sno属性定义为码(1)在列级定义主码 CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) NO

3、T 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 CHAR(20),PRIMARY KEY (Sno); 实体完整性定义(续)例2将SC表中的Sno,Cno属性组定义为码CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PR

4、IMARY KEY (Sno,Cno) /*只能在表级定义主码*/ ); 5.1 实体完整性n5.1.1 实体完整性定义n5.1.2 实体完整性检查和违约处理5.1.2 实体完整性检查和违约处理n插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:n1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改n2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改实体完整性检查和违约处理(续)n检查记录中主码值是否唯一的一种方法是进行全表扫描实体完整性检查和违约处理(续)n索引 第五章 数据库完整性5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4

5、完整性约束命名字句*5.5 域中的完整性限制5.6 触发器5.7 小结5.2 参照完整性n5.2.1 参照完整性定义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)

6、 NOT NULL, Cno CHAR(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)违约处

7、理可能破坏参照完整性 插入元组拒绝可能破坏参照完整性 修改外码值拒绝删除元组 可能破坏参照完整 性拒绝/级连删除/设置为 空值修改主码值 可能破坏参照完整 性拒绝/级连修改/设置为 空值违约处理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 SMALLINT,PR

8、IMARY 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.1 实体完整

9、性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.4元组上的约束条件检查和违约处理5.3.1 属性上的约束条件的定义nCREATE TABLE时定义n列值非空(NOT NULL)n列值唯一(UNIQUE)n检查列值是否满足一个布尔表达式(CHECK

10、)属性上的约束条件的定义(续)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), /* 如果在表级定义实体完整性,隐含了Sno,Cno不允 许取空值,则在列级不允许取空值的定义就不必写了 * /); 属性上的约束条件的定义(续)n2.列值唯一 例6 建立部门表DEPT,要求部门名称Dname列取值 唯一,部门编号Deptno列为主码CREATE

11、TABLE DEPT(Deptno NUMERIC(2),Dname CHAR(9) UNIQUE,/*要求Dname列值 唯一*/Location CHAR(10),PRIMARY KEY (Deptno);属性上的约束条件的定义(续)n3. 用CHECK短语指定列值应该满足的条件 例7 Student表的Ssex只允许取“男”或“女”。CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (男,女) ) , /*性别属性Ssex只允许取男或女 */Sa

12、ge SMALLINT,Sdept CHAR(20);5.3 用户定义的完整性n5.3.1 属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义 n5.3.4元组上的约束条件检查和违约处理5.3.2 属性上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足n如果不满足则操作被拒绝执行 5.3 用户定义的完整性n5.3.1 属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义 n5.3.4元组上的约束条件检查和违约处理5.3.3 元组上的约束条件的定义

13、n在CREATE TABLE时可以用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两个属性值之间的

14、约束条件*/);性别是女性的元组都能通过该项检查,因为Ssex=女成立;当性别是男性时,要通过检查则名字一定不能以Ms.打头5.3 用户定义的完整性n5.3.1 属性上的约束条件的定义n5.3.2 属性上的约束条件检查和违约处理 n5.3.3 元组上的约束条件的定义 n5.3.4 元组上的约束条件检查和违约处理5.3.4 元组上的约束条件检查和违约处理n插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足n如果不满足则操作被拒绝执行 第五章 数据库完整性5.1 实体完整性5.2 参照完整性5.3 用户定义的完整性5.4 完整性约束命名子句*5.5 域中的完整性限制5.6 触发器5

15、.7 小结5.4 完整性约束命名子句nCONSTRAINT 约束CONSTRAINT PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语完整性约束命名子句(续)例10 建立学生登记表Student,要求学号在9000099999之间 ,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATE TABLE 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 在线).在这个例子中触发器发挥了它的作用!写个简单的SQL 就可以让SQL SERVER在对A表插入登陆时间的同时在B中更 改该用户状态!触发器就象JAVA或者C#的事件,我们在点一个按扭的同 时会触发它上面的某个动作(即事件,当然前提是该按钮成功 的绑定了事件).5.6 触发器n5.6.1 定义触发器 n5.6.2 激活触发器 n5.6.3 删除触发器 5.6.1 定义触发器nCREATE TRI

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

当前位置:首页 > 高等教育 > 大学课件

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