高级数据库技术 (3)
29
武汉大学计算机学院
外 键 和 参 照 完 整 性
5.
创建表时定义外键,DBMS自动支持参照完整性
定义表语句的基本语法
CREATE TABLE 〈表名〉 ( (<列名><数据类型>[NOT NULL│NULL] [UNIQUE] [, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]… [, PRIMARY KEY (<列名>[,<列名>] …)] [, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>] );
(lname,fname)
telephone
(lname,fname,telephone)
包含超键的多 个列都是超键
(sid,fname)
16
武汉大学计算机学院
主 键 和 实 体 完 整 性
2.
键(候选键)
—— 给定一个表T,标题Head(T)=A1…An。 表T的一个键,有时也称为候选键,是具有 以下两个特征的一组属性的集合K=Ai1…Aik:
18
武汉大学计算机学院
主 键 和 实 体 完 整 性
4.
实体完整性规则
—— 表T中的任意行在主键列的取值都不允许为空
下面的理解中,哪个是正确的?
规则4.1 实体完整性规则 若属性A是基本关系R的主属性, 则属性A不能取空值。 ? 规则4.1 实体完整性规则 若属性A是基本关系R的主键属性, 则属性A不能取空值。 √ 规则4.1 实体完整性规则 任何主键属性都不能为空。 规则4.1 实体完整性规则 主键不能为空。
UNIT two 完整性与视图
1
武汉大学计算机学院
思 考 几 个 问 题
1.
2.
应用环境中存在很多规则,而这些规则反 映为属性的取值域、属性之间的取值约束, 这是数据库必须遵从的,否则,数据库中 的数据会出现不一致或错误。你如何保证 数据之间的约束关系的?你考虑过完整性 约束的检测对系统性能的影响吗?你知道 DBMS能提供什么帮助吗? 视图是一个虚表,应用环境中你会用到很 多视图,它确实给你带来很多好处,但你 真的觉得操作起来视图能与基本表一样吗?
sid 1 2 3 5
lname Jones Smith Brown White
fname Allan John Harry Edward
class 2 3 2 3
telephone 555-1234 555-4321 555-1122 555-3344
如果学校不允许重名, 则键为sid,(lname,fname). 可以任选一个作主键 如果学校允许重 名呢?
26
武汉大学计算机学院
外 键 和 参 照 完 整 性
3.
实例
例1 两个关系间 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 例2 两个以上的关系间 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩) 例3 同一关系 学生2(学号,姓名,性别,专业号,年龄,班长)
(sid,cno , first) (sid,cno , time) sid 为主键? 为主键 ? 为主键 ? cno 为主键? 主键的选择可能决 (sid,cno)为主键 ? 定系统的功能 (sid,cno,major)为主键? 21 武汉大学计算机学院
主 键 和 实 体 完 整 性
被参照的关系 参照关系 外键
S
KS
R
KR F
25
武汉大学计算机学院
外 键 和 参 照 完 整 性
2.
参照完整性规则
若属性(或属性组)F是基本关系R的外键,它与基 本关系S的键KS 相对应(关系R和S不一定是不同的关 系),则对于R中每个元组在F上的值必须为: (1)或者取空值(F的每个属性值均为空值); (2)或者等于S中某个元组的主键值。
27
武汉大学计算机学院
外 键 和 参 照 完 整 性
4.
什么操作可能破坏参照完整性
被参照的关系 参照关系 外键
S
KS
R
KR F
S 插入元组 删除元组
R
修改元组
28
武汉大学计算机学院
外 键 和 参 照 完 整 性
4.
什么操作可能破坏参照完整性 对被参照表的删除和更新操作 对参照表的插入和更新操作
30
武汉大学计算机学院
外 键 和 参 照 完 整 性
6.
1)
实现参照完整性要考虑的几个问题:
外键能否接受空值的问题 在被参照关系中删除元组的问题 -- 级联删除、受限删除、置空值删除 在参照关系中插入元组的问题 -- 受限插入、递归插入 修改关系中主键的问题 -- 不允许修改主键、允许修改主键
31
2)
3)
4)
武汉大学计算机学院
外 键 和 参 照 完 整 性
7.
参照完整性被破坏时可选择的策略
DBMS在实现参照完整性时,除了要提供定 义主键、外键的机制外,还需要提供不同的 策略供用户选择。根据应用环境的要求,选 择策略(Full SQL-99):
1) 2)
如果u,v是T中两个不同的元组,则u[K]≠v[K]; 没有K的真子集H具有特征1)。
表在某一时刻的内容无法告诉我们表中 的键是什么 每个表都至少有一个键
17
武汉大学计算机学院
主 键 和 实 体 完 整 性
3.
主键
—— 主键是被数据库设计者选择出来作为表T的 行的唯一性标识符的候选键 键是客观的概念,主键是主观的概念 例 下表中的键和主键是什么?
11
武汉大学计算机学院
完整性约束条件分类
2.
完整性约束条件的对象状态
静态约束 -- 指数据库每一确定状态时的数据对象所 应满足的约束条件,它是反映数据库状态 合理性的约束。
动态约束 -- 指数据库从一种状态转变为另一种状态 时,新、旧值之间所应满足的约束条件, 它是反映数据库状态变迁的约束。
sid 1 1 2 3 3 5 5 cno 101 108 105 101 108 102 105 major No Yes No Yes No No No first Y Y Y Y Y Y Y
enrollment
sid 1 1 2 3 3 5 5 cno 101 108 105 101 108 102 105 major No Yes No Yes No No No time 1 1 1 1 1 1 1
3
武汉大学计算机学院
一.完整性控制的实现原理 二.完整性约束条件分类 三. 主键和实体完整性 四. 外键和参照完整性 五. 非过程性约束的实现 六. 过程性约束与触发器 七. 视图的定义、查询与更新 八. 视图的作用
4
武汉大学计算机学院
完整性控制的
实现原理
5
武汉大学计算机学院
完整性控制的实现原理
7.
创建表时定义主键,DBMS自动支持实体完整性
定义表语句的基本语法
CREATE TABLE 〈表名〉 ( (<列名><数据类型>[NOT NULL│NULL] [UNIQUE] [, <列名><数据类型>[NOT NULL│NULL] [UNIQUE]]… [, PRIMARY KEY (<列名>[,<列名>] …)] [, FOREIGN KEY (<列名>[,<列名>] …)REFERENCES <被参照表名>] );
完整性控制的实现原理
2.
完整性控制子系统(过程性约束)
定义 完整性 约束 用户发出 更新操作 请求 完整性规则 登记 DD
检查
操作数据 DB DBMS的完整性子系统
7
武汉大学计算机学院
完整性控制的实现原理
3.
完整性控制的功能
定义功能
-- 提供定义完整性约束条件的机制
检查功能
-- 在一定的时机,检查用户操作请求是否违背完 整性约束条件
12
武汉大学计算机学院
完整性约束条件分类
3.
完整性约束条件分类
动态列级约束 动态元组约束
对象状态 动态
动态关系约束
静态
静态列级约束
静态元组约束
静态关系约束
列
元组
关系
对象粒度
13
武汉大学计算机学院
完整性约束条件分类
3.
完整性约束条件分类
状态 粒度 列级 元组级 关系级
静态
列定义 类型 格式 值域 和 实 体 完 整 性
5.
什么操作可能破坏实体完整性规则?
假定关系R的主键为K,对R的操作有:检索和 更新两大类。
检索操作不可能破坏实体完整性规则 更新操作: 插入元组 (可能,当插入元组的主键属性为空时) 删除元组 (不可能) 修改元组 (可能,当修改元组的主键属性为空时)
(修改元组 = 删除元组 + 插入元组)
20
武汉大学计算机学院
主 键 和 实 体 完 整 性
6.
sid 1 1 2 3 3 5 5
如何选择有效的主键?
enrollment
cno 101 108 105 101 108 102 105 major No Yes No Yes No No No
enrollment
students
sid 1 2 3 5 lname Jones Smith Brown White fname Allan John Harry Edward class 2 3 2 3 telephone 555-1234 555-4321 555-1122 555-3344