当前位置:文档之家› ch8 数据库系统概念(第6版)第八章关系数据库设计

ch8 数据库系统概念(第6版)第八章关系数据库设计

29
第二范式
第二范式(2NF) 满足第一范式的关系模式R, 如果所有非主属性 都完全依赖于键, 则称R属于第二范式。记为 R∈2NF。 定义 在关系模式R中,如果存在 的真子集 ’使得’→ 成立,则称 部分函数依赖于 。如果R中的每个属性A都满足如下准则之一,则 关系模式属于第二范式2NF:
14
函数依赖
让 R 是关系模式 R 且 R R 上存在函数依赖(是指假设给定 属性的值,就 知道 的值,那么 函数决定 ),记作 → 是指对任意合法关系r(R)及r 中任意两个元组t1 和 t2,若 t1[] = t2 [] t1[] = t2 [] 作用 指明合法关系集上的约束 检测关系是否在给定函数依赖集上合法
31
第三范式
第三范式(3NF) 若R∈2NF, 且它的任何一个非主属性都不传递依赖 于主键, 则称关系R满足第三范式。记为R∈3NF 定义 关系模式R 属于第三范式(3NF)当且仅当对所 有F+中依赖: 下列条件中至少一个成立:
pseudotransitivity)
23
24
第一范式
如果域中的元素是无法分割的单元,则该域是原 子的
非原子域实例:
名字集合, 是复合属性 身份号码,例如 CS101 ,可以被分解为几个部分
非原子值存储复杂,且容易引起数据冗余(重复 )存储
例如: 账户集合和每个客户一起存储, 持有人集合和每个账户一起 存储 假定所有的关系都属于第一范式 (在 第22章: 基于对象的数据库)
11
目标
决定特定的关系 R 是否有一个 “良好” 形式. 如果 R 不具有 “良好” 形式, 将其分解为关系集 {R1, R2, ..., Rn}, 满足 每个关系都有良好形式 该分解是无损连接分解 理论基于数据依赖: 函数依赖 多值依赖 连接依赖
数据依赖
属性之间的联系是属性间的相互依赖又相互制约的 关系, 这种关系称为数据依赖。 数据依赖:
21
*计算
F+ = F
+ F
的算法
下列过程计算函数依赖集F的闭包:
repeat for each F+中的函数依赖 f 对f 应用自反和增补规则 将结果函数依赖加入F+ for each F+中的一对函数依赖f1 和f2 if 若 f1 和f2 可利用传递规则合并 then将结果函数依赖加入F+ until F+ 不再变化 注意: 后面会介绍完成此任务的另一过程
loan-number
→ customer-name.
17
函数依赖规则(Armstrong’s公理)
Armstrong’s 公理
if ,
then → (自反律reflexivity) if → , then γ →γ (增补律augmentation 增广律) if → 及 → γ , then → γ (传递律 transitivity) 这些定理是正确完整的 * γ = γ
中:
R = R1 R2
无损连接分解 对模式R上的所有可能的关系r r = R1 (r) R2 (r)
10
关系数据库设计中易犯的错误
关系数据库设计要求找到一个合理关系模式集合 . 一个不合理模式可能导致
信息的重复 某些信息不能表示
设计目标:
避免冗余数据 确保属性间联系得以表示 方便检查更新是否破坏了数据库完整性约束
它出现在一个侯选码中。 它没有部分依赖于一个侯选码。
30
第三范式
SL(SNO,SDEPT,SLOC) ∈2NF 但存在下列问题: 插入异常 删除异常 修改复杂 数据冗余度大
SL 还存在数据冗余和删除异常问题。原因是存在非主属
性Sloc 对键Sno 的传递依赖存在(新系没招生插不进去 ,学生走完,系就没有了) 。 将SL分解为两个关系模式 SNO SDEPT, SDEPTSLOC SD(SNO, SDEPT) DL(SDEPT,SLOC)
如果 既依赖又可依赖 的子集‘ ,则称部分依赖。 如果 中没有一个属性在中,则称完全函数(完全非平凡)依赖的 。
sno,cno → grade
19
函数依赖集的闭包
给定函数依赖集F, 存在其他函数依赖被F 逻辑蕴含. 例如: 如果 A B 且 B C, 则可推出 A C 被F 逻辑蕴含的全体函数依赖的集合称为F 的闭包. 用F+ 表示F 的闭包. 如何找出 F+ : 利用Armstrong公理找出 F+ 这些规则是 正确的 (只产生确实成立的函数依赖) 完备的 (产生所有成立的函数依赖).
但是不希望有:
loan-number → customer-name
16
函数依赖
使用函数依赖 说明在合法关系上的约束,如果R上的所有关系满足函 数依赖集合,我们就说 R上 F 成立。 测试关系看他们在给定的函数依赖下是否合法,如果 关系 r 在函数依赖集F上合法,我们就说r 满足F。 注意:一个关系模式的具体例子也可能满足函 数依赖即使函数依赖不支持所有的合法的例子。例 如,Loan-schema 的一个具体例子可能碰巧满足
15
函数依赖
函数依赖允许我们通过数据库建模来表示企业中的某些事 实。考虑模式: Loan-info-schema = (branch-name, loan-number, customer-name, amount). 希望函数依赖集有:
loan-number → amount loan-number → branch-name
20
例如
R = (A, B, C, G, H, I) F={ AB AC CG H CG I B H} F+ 的某些成员(找出潜在的F)
从A B 和 B H 根据传递规则,推出A H 用G增补A C 得AG CG, 再由CG I 根据传递规则,推
出AG I 由CG H and CG I : 可根据函数依赖的定义导出“并 规则”, 或增补 CG I 得到CG CGI,增补CG H 得到 CGI HI, 再利用传递规则,推出CG HI
(关系集 inst_dept没有被连接)
结果有可能出现信息重复
关系数据库设计中易犯的错误
过度冗余——数据重复 更新异常——更新代价大、可能导致数据不一致 删除异常——部分信息的删除可能导致信息的丢失 插入异常——必须有完整信息
5
不重复的合并表
将以下关系进行合并
sec_class(sec_id, building, room_number) 和 section(course_id, sec_id, semester, year) 合并为一个关系 section(course_id, sec_id, semester, year,
函数依赖 多值依赖
连接依赖
数据依赖的特点及性质是关系规范化的理论基础。
13
函数依赖
函数依赖( Functional Dependency,FD )是在 合法的关系集上的约束(是属性间的关联,是一种 约束,依赖是针对数据模式,而不是特定的实例 (避免从个别元组中归纳约束))。 要求一个属性集的值唯一地决定另外一个属性集 的值。 函数依赖是键的概念扩充。
28
第二范式
SLC(SNO,SDEPT,SLOC,CNO,G)∈1NF,但存在下列问题: 插入异常:若学生没有选课,则他的个人信息及所在系 的信息就无法插入(SNO=S7,SDEPT=PHY,SLOC=BLD2 由于该生
未选课故无CNO)
删除异常:若删除学生的选课信息,则有关他的个人信
息及所在系的信息也随之删除了(假定某个学生只选一门课,
22
函数依赖规则(Armstrong’s公理的扩展)
以下规则可以由 Armstrong’s公理推理而来
若有


→γ,
则有 和
→ γ
(合并律union)
若有 → γ,则有 若有

→γ(分解律decomposition)
→及γ → δ,则有γ → δ(伪传递律
数据库系统
上海交通大学计算机系 张忠能
zhang-zn@
1
第8章:关系数据库设计
关系数据库设计中易犯的错误 函数依赖 分解 第一范式与第二范式 第三范式 Boyce - Codd 范式 多值依赖与第四范式
3
关系数据库设计中易犯的错误
假设我们将 instructor 和 department 合并为 inst_dept
building, room_number)
不会产生重复
有损分解
分解R = (A, B) R1 = (A)
A B A
R2 = (B)
B 1 2 B(r)

r
1 2 1

A(r) A B 1 2 1 2
A (r)
B (r)

7
有损分解 例
假设我们从 inst_dept 着手. 如何将它分开 (分解) 成为 instructor 和 department? 定一个规则 “如果存在模式 (dept_name, building, budget), 则 dept_name 会成为候选码” 表示为 函数依赖: dept_name building, budget 在 inst_dept 中, 由于 dept_name 不是候选码, 故一个部 门的大楼和预算可能会出现重复. 由此说明需要分解 inst_dept 不是怎样分解都合适. 假设我们把 employee(ID, name, street, city, salary) 分解为 employee1 (ID, name) employee2 (name, street, city, salary) 下个幻灯片会说明这将丢失信息 -- 无法重构原始的 employee 关系 -- 故这是一个 有损分解.
相关主题