ch8数据库系统概念(第6版)第八章关系数据库设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
目标
决定特定的关系 R 是否有一个 “良好” 形式. 如果 R 不具有 “良好” 形式, 将其分解为关系集 {R1, R2, ..., Rn}, 满足 每个关系都有良好形式 该分解是无损连接分解 理论基于数据依赖: 函数依赖 多值依赖 连接依赖
数据依赖
属性之间的联系是属性间的相互依赖又相互制约的 关系, 这种关系称为数据依赖。 数据依赖:
中:
R = R1 R2
无损连接分解 对模式R上的所有可能的关系r r = R1 (r) R2 (r)
10
关系数据库设计中易犯的错误
关系数据库设计要求找到一个合理关系模式集合 . 一个不合理模式可能导致
信息的重复 某些信息不能表示
设计目标:
避免冗余数据 确保属性间联系得以表示 方便检查更新是否破坏了数据库完整性约束
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 关系 -- 故这是一个 有损分解.
(关系集 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 )是在 合法的关系集上的约束(是属性间的关联,是一种 约束,依赖是针对数据模式,而不是特定的实例 (避免从个别元组中归纳约束))。 要求一个属性集的值唯一地决定另外一个属性集 的值。 函数依赖是键的概念扩充。
loan-number
→ customer-name.
17
函数依赖规则(Armstrong’s公理)
Armstrong’s 公理
if ,
then → (自反律reflexivity) if → , then γ →γ (增补律augmentation 增广律) if → 及 → γ , then → γ (传递律 transitivity) 这些定理是正确完整的 * γ = γ
但是不希望有:
loan-number → customer-name
16
函数依赖
使用函数依赖 说明在合法关系上的约束,如果R上的所有关系满足函 数依赖集合,我们就说 R上 F 成立。 测试关系看他们在给定的函数依赖下是否合法,如果 关系 r 在函数依赖集F上合法,我们就说r 满足F。 注意:一个关系模式的具体例子也可能满足函 数依赖即使函数依赖不支持所有的合法的例子。例 如,Loan-schema 的一个具体例子可能碰巧满足
有损分解
无损分解
将关系模式Lending-schema 分解成:
Branch-schema = (branch-name, branch-city,assets) Loan-info-schema = (customer-name, loan-number, branch-name, amount) 原模式(R)的所有属性都必须出现在分解后的(R1, R2)
14
函依赖
让 R 是关系模式 R 且 R R 上存在函数依赖(是指假设给定 属性的值,就 知道 的值,那么 函数决定 ),记作 → 是指对任意合法关系r(R)及r 中任意两个元组t1 和 t2,若 t1[] = t2 [] t1[] = t2 [] 作用 指明合法关系集上的约束 检测关系是否在给定函数依赖集上合法
数据库系统
上海交通大学计算机系 张忠能
zhang-zn@
1
第8章:关系数据库设计
关系数据库设计中易犯的错误 函数依赖 分解 第一范式与第二范式 第三范式 Boyce - Codd 范式 多值依赖与第四范式
3
关系数据库设计中易犯的错误
假设我们将 instructor 和 department 合并为 inst_dept
15
函数依赖
函数依赖允许我们通过数据库建模来表示企业中的某些事 实。考虑模式: Loan-info-schema = (branch-name, loan-number, customer-name, amount). 希望函数依赖集有:
loan-number → amount loan-number → branch-name