数据库系统概论第五章数据库完整性总结

第五章 数据库完整性

定义:数据库的完整性 (integrity )是指数据的正确性 (correctness) 和相容性 (compat- ability)。

维护数据库的完整性, 数据库管理系统必须能够实现如下功能

  • 提供定义完整性约束条件的机制
    • 就是数据库管理人员自己定义方法
  • 提供完整性检查的方法
  • 进行违规处理
    • 自己定义,如果插入的数据不符合规范,将如何处理

5.1 实体完整性

5.1.1定义实体完整性

什么是实体完整性?

关系模型的实体完整性在CREATE TABLE中用PRIMARY_KEY定义

  • 单属性构成的码有
    • 定义为列级约束条件
    • 定义为表级约束条件
  • 多个属性构成的码
    • 定义为表级约束条件
CREATE TABLE student (
	Sno CHAR ( 9 ) PRIMARY KEY,/*对一列用或者说对单个属性用*/
	Sname CHAR ( 20 ) UNIQUE,
	Ssex CHAR ( 2 ),
	Sage SMALLINT,
	Sdept CHAR ( 20 ) 
);
或者
CREATE TABLE student (
	Sno CHAR ( 9 ),
	Sname CHAR ( 20 ) UNIQUE,
	Ssex CHAR ( 2 ),
	Sage SMALLINT,
	Sdept CHAR ( 20 ) ,
    PRIMARY KEY(Sno)/*放在最后就是对表*/
);

简而言之:主要让你明白PRIMARY KEY 有两种使用方法,尚且不说会不会用,但是一定要看得懂。还有实体完整性就是PRIMARY KEY 在创表中的使用

5.1.2 实体完整性检查和违规处理

  • 检查主码值是否唯 ,如果不唯一则拒绝插入或修改。
  • 检查主码的各个属性是否为空, 只要有有一个为空就拒绝插入或修改

简而言之:插入数据时,主码的值不为空,且不能重复,否则,会插入不成功。

5.2 参照完整性

5.2.1什么是参照完整性?

关系模型的参照完整性在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。

简而言之:就是创表的时候有FOREIGN KEY语句就是参照完整性了,而且,被参照的属性,必须是主码

CREATE TABLE SC (/*这就是定义在SC表上的参照完整性*/
	Sno CHAR ( 9 ),
	Cno CHAR ( 4 ),
	Grade SMALLINT,
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
);

5.2.2 参照完整性检杏和违约处理

请添加图片描述

可能破坏参照完整性的情况及违规处理
  • 拒绝(NO ACTION)执行
    • 破坏参照完整性,系统拒绝
  • 级联(CASCADE)操作
    • 破坏参照完整性,系统连带修改原来的被参照的值
  • 设置为空值
    • 破坏参照完整性,系统吧不一样的设置为空
CREATE TABLE SC (/*这就是定义在SC表上的参照完整性*/
	Sno CHAR ( 9 ),
	Cno CHAR ( 4 ),
	Grade SMALLINT,
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno )
    	ON DELETE CASCADE/*当删除Student表中的元组时, 级联删除SC表中相应的元组*/
    	ON UPDATE CASCADE,* 当更新Student表中的sno时, 级联更新SC表中相应的元组*/
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
    	ON DELETE NO ACTION/*当删除Course 表中的元组造成与SC表不一致时, 拒绝删除*/
    	ON UPDATE CASCADE/*当更新Course表中的cno时, 级联更新SC表中相应的元组*/
);

简而言之:就是,插入数据,完整性发生破坏时,数据库管理人员到底该怎么处理。无非是三种情况,1、发生冲突了,不执行当前语句,2、发生冲突了,把冲突改成了3、发生冲突了,把冲突设置为空

5.3 用户定义的完整性

5.3.1 属性上的约束条件(属性)

对属性的限制

  • 列值非空(NOT NULL)。
  • 列值唯一(UNIQUE)。
  • 检查列值是否满足一个条件表达式(CHECK短语)。
/*列值非空(NOT NULL)*/
CREATE TABLE SC (
	Sno CHAR ( 9 ) ,
	Cno CHAR ( 4 ),
	Grade SMALLINT NOT NULL,/*Grade插入数据时不能为空值*/
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
);
/*列值唯一(UNIQUE)*/
CREATE TABLE SC (
	Sno CHAR ( 9 ) ,
	Cno CHAR ( 4 ),
	Grade SMALLINT UNIQUE,/*Grade插入数据时不能重复,即相同数据不能插入*/
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
);
/*用CHECK短语指定列值应该满足的条件*/
CREATE TABLE SC (
	Sno CHAR ( 9 ) ,
	Cno CHAR ( 4 ),
	Grade SMALLINT 
    	CHECK(Gread >= 0 AND Gread <= 100),/*成绩只能在0-100之间*/
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) 
);

5.3.2 元组上的约束条件

定义:同时对多个属性进行约束
CREATE TABLE SC (
	Sno CHAR ( 9 ) ,
	Cno CHAR ( 4 ),
	Grade SMALLINT,
	PRIMARY KEY ( Sno, Cno ),
	FOREIGN KEY ( Sno ) REFERENCES student ( Sno ),
	FOREIGN KEY ( Cno ) REFERENCES Course ( Cno ) ,
    CHECK(Gread >= 90 OR Sno NOT LIKE '521%')
    /*成绩大于等于90或者学号521开头的才能插入*/
);

5.4 完整性约束命名子句(属性与属性即元组)

定义对完整性约束条件进行命名的语句

基本格式:CONSTRAINT<完整性约束条件名><完整性约束条件>
<完整性约束条件>包括 NOT NULL、 UNIQUE 、 PRIMARY KEY 、 FOREIGN KEY 、 CHECK 短语等。

  1. 建立约束
CREATE TABLE student (
	Sno CHAR ( 9 )
		CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 9999),
	Sname CHAR ( 20 ) 
		CONSTRAINT C2 NOT NULL,
	Ssex CHAR ( 2 ),
	Sage SMALLINT
		CONSTRAINT C3 CHECK(Sage < 30),/*建立约束*/
	Sdept CHAR ( 20 ) ,
    PRIMARY KEY(Sno)/*放在最后就是对表*/
);
  1. 修改约束
ALTER TABLE Student/*修改哪一个表*/

	DROP CONSTRAINT C4; /*修改什么*/

5.6 断言(表与表)

可以定义涉及多个表或聚集操作的比较复杂的完整性约束。 断言创建以后, 任何对断言中所涉及关系的操作都会触发关系数据库管理系统对断言的检查, 任何使断言不为真值的操作都会被拒绝执行。

创建基本格式:CREATE ASSERTION<断言名><CHECK子句>

简而言之,ASSERTION + 断言名 + 查询语句

CREATE ASSERTION ASSE_SC_CNUMI
	CHECK(60 >= ALL(SELSCE COUNT(*)
                   FROM SC
                   GROUP BY cno)
         );

删除基本格式:DROP ASSRETION<断言名>;


结束!这一章总的来说,就是讲了,属性、属性与属性、表与表,之间的插入值非法的问题(即完整性被破坏),应该怎么设置,插入值的类型及类型。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统概论第五版》是由美国加州大学河滨分校Elmasri Ramez和Navathe Shamkant著作的一部经典数据库教材。第十章主要讲述了数据库安全和授权管理的相关内容。 在数据库系统,安全性是非常重要的一个方面。因为数据库包含了大量的敏感信息,如个人隐私数据、商业机密等,因此必须要有一套严格的安全机制来保护这些信息不被未经授权的人员访问、修改或删除。第十章首先介绍了基本的安全概念,如认证、授权、审计等,并详细讨论了数据库的安全问题和常见的安全威胁。 在保护数据库安全方面,授权管理是非常重要的一环。合理地设置和管理用户的权限可以有效地保护数据库的机密性和完整性。在第十章,作者详细介绍了授权管理的基本原则和方法,并对常见的授权策略进行了解释和比较。同时,还介绍了数据库的访问控制和角色管理等相关内容。 此,第十章还讨论了数据库的审计功能。审计是指记录和追踪对数据库的各种操作,可以帮助管理员查找和解决数据库的安全问题。本章还介绍了审计的基本原理和方法,以及如何在实际数据库系统实施审计功能。 综上所述,《数据库系统概论第五版》第十章主要涵盖了数据库安全和授权管理的相关内容,对于学习和理解数据库系统的安全性和管理性能够起到很好的指导作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值