mysql逻辑模型_数据库逻辑模型设计.ppt
数据库逻辑模型设计
例如: 给定F = {A ? C, AB ? C } B 在AB ? C 中是无关紧要的, 因为A ? C 逻辑蕴含AB ? C. 例如: 给定 F = {A ? C, AB ? CD} C 在AB ? CD 中是无关紧要的, 因为即使删除C 也能推出A ? C First Normal Form 1NF Second Normal Form 2NF Third Normal Form 3NF Boyce-Codd Normal Form BCNF 基于数据依赖和函数依赖: 关系范式: 第一范式 如果域中元素被认为是不可分的, 则域称为是原子的 非原子域的例子: 名字集合, 复合属性 象CS101之类的标识号可以分成若干部分 如果关系模式R的所有属性的域都是原子的, 则R称为属于第一范式 非原子值存储复杂并易导致数据冗余 E.g. 每个客户的账户集合, 以及每个账户的拥有者集合 我们假定所有关系都属于第一范式 2NF:若R是1NF,且每个非键属性完全依赖于候选键,则称R为2NF(消除非键属性对候选键的部分依赖)。 例:关系模式S(SNO , SN , SD , DEAN , CNO , G) (SNO, CNO)为候选键,SNO?SN,SNO?SD,存在部分依赖,非2NF,则会有以下问题: 插入异常:如果学生没有选课,关于他的个人信息及所在系的信息就 无法插入。 删除异常:如果删除学生的选课信息,则有关他的个人信息及所在 的信息也随之删除了。 更新异常:如果学生转系,若他选修了k门课,则需要修改k次。 数据冗余:如果一个学生选修了k门课,则有关他的所在系的信息重 复。 可将S分解为:SC(SNO , CNO , G) S_SD(SNO , SN , SD , DEAN) 第三范式 关系模式R 属于第三范式 (3NF) 当且仅当对所有F+中依赖: ? ? ? 下列条件中至少一个成立: ? ? ? 是平凡的 (i.e., ? ? ?) ? 是R 的超键 ? – ? 中的每个属性A 包含在R 的某个候选键中. (注: 各属性可能包含在不同候选键中) 或: 非主属性既不部分依赖也不传递依赖于R的候选键,则称R是第三范式。 S_SD(SNO , SN , SD , DEAN) : SNO ?SD, SD ?DEAN STUDENT(SNO , SN , SD) DEPT(SD , DEAN) Boyce-Codd 范式: ?? ? ? 是平凡的 (i.e., ? ? ?) ? 是R的超键 具有函数依赖集合F 的关系模式R 属于BCNF当且仅当对F+中所有函数依赖??? ?, 下列两条件至少一个成立: 或: 如果关系模式R是1NF,且每个属性都不部分依赖于候选键也不传递依赖于候选键,那么称R是BC范式。 SPC(SNO , PNO , CNO) : PNO?CNO (SNO,CNO)?PNO 每位老师只教授一门课;某学生选定一门课,就对应一位老师 (SNO,PNO)?CNO (SNO,CNO)?PNO,(SNO,PNO),(SNO,CNO)为候选键。所有属性为键属性,为第三范式,但非BCNF SP(SNO,PNO),PC(PNO,CNO) 因3NF的冗余引起的问题 R = (J, K, L)F = {JK ? L, L ? K} J j1 j2 j3 null L l1 l1 l1 l2 K k1 k1 k1 k2 属于3NF但不属于 BCNF的模式有下面的问题 信息重复 (e.g., 联系l1, k1) 需要使用空值 (e.g., 表示联系l2, k2 , 这里没有对应的J 值). 多属性依赖集候选关键字求法: 输入:关系模式R及其函数依赖集F 输出:R的所有候选关键字。 方法: (1)将R的所有属性分为四类: L类:仅出现在F的函数依赖左部的属性; R类:仅出现在F的函数依赖右部的属性; N类:在F的函数依赖左右两边均未出现的属性; LR类:在F的函数依赖左右两边均出现的属性; 并令X代表L、N类,Y代表LR类; (2)求X+,若包含了R的所有属性,则X即为R的唯一候选关键字,转(5),否则转(3); (3)在Y中取一属性A,求(XA)+,若它包含了R的所有属性,则转(4),否则,调换一属性反复进行这一过程,直到试完所有Y中的属性; (4)如果已找出所有的候选关键字,则转(5),否则在Y中依此取两个、三个,…,求他们的属性闭包,直到其闭包包含R的所有的属性。 (5)停止,输出结果。 (1)R=(W,X,Y,Z),F={X→Z, WX→Y} Candidate Key {W,X},1NF. (2) R(U,F),U=