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

闭包

  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}

猜你喜欢

转载自blog.csdn.net/iTaylorfan/article/details/106578508