数据库系统概论 第 5 章 数据库完整性 知识点整理

0. 概述

  1. 什么是数据库的完整性?
    数据库的完整性是指数据的正确性和相容性。数据的正确性是值数据是符合现实世界语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。

  2. DBMS 的完整性控制机制应具有哪三个方面的功能?
    a. 定义功能;
    b. 检查功能;
    c. 违约处理功能。

  3. 定义数据库完整性一般由 SQL 的 _____ 语句实现的?
    DDL(数据库模式定义语言)

1. 实体完整性

  1. 如何在 SQL 中定义实体完整性?
CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEY,	// 在列级定义主码
	 /*...*/
	);
	
CREATE TABLE SC
	(Sno CHAR(9) NOT NULL,
	 Cno CHAR(9) NOT NULL,
	/*...*/
 	 PRIMARY KEY (Sno, Cno)		// 属性组只能在表级定义主码
	);

2. 参照完整性

  1. 如何在 SQL 中定义参照完整性?
CREATE TABLE SC
	(Sno CHAR(9) NOT NULL,
	 Cno CHAR(9) NOT NULL,
	 /*...*/
	 PRIMARY KEY (Sno, Cno),
	 FOREIGN KEY (Sno) REFERENCES Student(Sno),	// 在表级定义参照完整性
	 FOREIGN KEY (Cno) REFERENCES Course(Cno)
	);

注意:

  • 定义参照完整性的时候注意定义的顺序,被参照表要先被定义。

3. 用户定义的完整性

  1. 定义属性上的约束条件。
    属性值的限制有三种:列值非空(NOT NULL),列值唯一(UNIQUE),检查列值是否满足一个条件表达式(CHECK短语)。
CREATE TABLE Student
	(Sno CHAR(9) NOT NULL,
	 Dname CHAR(9) UNIQUE NOT NULL,	// 唯一且不能取空值
	 // 性别只允许取'男'或'女'
	 Ssex CHAR(2) CHECK(Ssex IN ('男','女')),	
	 // 限定成绩的取值范围
	 Grade SMALLINT CHECK(Grade >= 0 AND Grade <= 100),	
	 /*...*/
	);
  1. 定义元组上的约束条件。
// 例:学生性别是男时,其名字不能以 Ms. 打头
CREATE TABLE Student
	(Sno CHAR(9),
	 Sname CHAR(8) NOT NULL,
	 Ssex CHAR(2),
	 /*...*/
	 // 定义两个属性值之间的约束条件
	 CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')	
	);

4. 完整性约束命名子句

  1. 定义完整性约束命名子句。
    CONSTRAINT <完整性约束条件名> <完整性约束条件>
    其中<完整性约束条件>包括NOT NULLUNIQUEPRIMARY KEYFOREIGN KEYCHECK短语等。

  2. 修改表中的完整性约束子句。
    a. 去掉某个完整性约束子句:
    ALTER TABLE <表名> DROP CONSTRAINT <完整性约束条件名>;
    b. 增加新的完整性约束子句:
    ALTER TABLE <表名> ADD CONSTRAINT <完整性约束条件名> <完整性约束条件>;

5. 域中的完整性限制

  1. 定义域,建立并修改该域应该满足的完整性约束条件。
// 例:建立域的同时声明取值范围
CREATE DOMAIN GenderDomain CHAR(2)
	CHECK (VALUE IN ('男','女'));

// 例:建立域的同时对其中的限制命名
CREATE DOMAIN GenderDomain CHAR(2)
	CONSTRAINT GD CHECK (VALUE IN ('男','女'));
// 删除限制条件
ALTER DOMAIN GenderDomain 
	DROP CONSTRAINT GD;
// 增加限制条件
ALTER DOMAIN GenderDomain 
	ADD CONSTRAINT GDD CHECK (VALUE IN ('1','0'));

6. 断言

  1. 定义断言的格式?
    CREATE ASSERTION <断言名> <CHECK 子句>;
    其中<CHECK 子句>中的约束条件与WHERE子句的条件表达式类似。
// 例:限制每一门课程最多 60 名学生选修
CREATE ASSERTION ASSE_SC_CNUM1
	CHECK(60 >= ALL(SELECT count(*)
					FROM SC
					GROUP BY cno)
				   );
  1. 删除断言的格式?
    DROP ASSERTION <断言名>;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值