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

第五章 数据库完整性

定义:数据库的完整性 (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 参照完整性检杏和违约处理

数据库系统概论第五章数据库完整性总结_第1张图片

可能破坏参照完整性的情况及违规处理
  • 拒绝(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<断言名>;


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

你可能感兴趣的:(数据库,sql)