数据库原理闭包、范式和求最小函数依赖集的例题

闭包

  1. 已知关系模式R(A,B,C),F是R上成立的FD集,F={A→B,B→C}, F的闭包F+有多少个?试写出(AB)+的所有闭包。

    根据已知条件和推理规则,可知F+有43个函数依赖。各种情况如下:
    函数依赖
    答:F的闭包F+有43个;(AB)的闭包(AB)+ =ABC

  2. 设关系R(ABCDE)上FD集为F,并且F={A→BC,CD→E,B→D,E→A}。求出R的所有候选键。
    :A+=ABCDE B+=BD C+=C D+=D E+=EABCD 候选码有A、E。
           对剩下的B 、C、D进行组合:
           可以求出:BC+=ABCDE BD+=BD CD+=ABCDE
           BC、CD也为候选码
           所以R的候选键有四个:A、E、BC和CD。

  3. R<U,F>,
    U={A,B,C,D,E,G}
    F{AB→C,D→EG,C→A,BE→C,BC→D,CG→BD,ACD→B,CE→AG}
    X=BD,求X+,并判断BD->A是否成立?

    因为X=BD 所以X+=(BD)+;
    因为D→EG
    所以BD→BDEG
    因为BE→C
    所以BD→BCDEG
    因为C→A
    所以BD→ABCDEG
    所以(BD)+=ABCDEG
    所以 X+=ABCDEG
    因为(BD)+=ABCDEG,A属于(BD)+
    所以BD->A是成立的。

范式

  1. 给定一个学校的学生选课系统,为了方便起见,我们只确定了以下需要的内容:
    R(学号、学生姓名、年龄、性别、课程名称、课程学分、系别、学科成绩、系办地址、系办电话)
    首先判断它是几范式?如何把它规范化成3NF?

    范式首先要找主码:(学号,课程名称)
    学号单独决定学生姓名,所以学生姓名就是部分函数依赖于主码
    所以R是1NF(第一范式)
    拆成2NF(消除部分函数依赖)
    R1(学号、学生姓名、年龄、性别、系别、系办地址、系办电话)
    R2(学号、课程名称、课程学分、学科成绩)
    在R1中,存在学号→系别→系办地址,传递函数依赖(非第三范式)
    拆成3NF(消除传递函数依赖):
    R11(学号、学生姓名、年龄、性别、系别)
    R12(系别、系办地址、系办电话)
    R2(学号、课程名称、课程学分、学科成绩)

求最小函数依赖集

  1. 给定关系模式R(A,B,C) F={A->BC,B->AC,C->A} 求F的最小函数依赖集。

    (1)将F中的函数依赖进行拆分:
    F={A->B,A->C,B->A,B->C,C->A}
    (2)假设A->B冗余(去掉A->B)
    剩下:F={A->C,B->A,B->C,C->A}
    A+=AC
    但是B不属于AC,也就是不属于A的闭包,留下
    (3)假设A->C冗余
    剩下:F={A->B,B->A,B->C,C->A}
    A+=ABC
    C属于A的闭包,所以删除
    (4)删除后F={A->B,B->A,B->C,C->A}
    假设B->A冗余
    F={A->B,B->C,C->A}
    B+=ABC 删除
    (5)删除后F={A->B,B->C,C->A}
    假设B->C冗余
    F={A->B,C->A}
    B+=B 留下
    (6)假设C->A冗余
    F={A->B,B->C}
    C+=C A不属于C的闭包 留下
    所以F的最小函数依赖集为:{A->B,B->C,C->A}
  • 21
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值