美文网首页
数据库设计常见问题

数据库设计常见问题

作者: 在阳光下睡觉 | 来源:发表于2020-10-31 19:42 被阅读0次

    数据设计常见问题

    • 数据冗余
    • 更新异常
    • 插入/删除异常

    无损连接分解

    分解后的两张表自然连接后能得到原来的表叫做无损连接
    重点是作为连接的属性必须是R1或R2的码,具有不可重复性

    函数依赖

    若A属性值确定了,则B属性值也唯一确定了,于是就有A→B
    对所有关系都满足的函数依赖称为平凡的

    平凡依赖

    定义:
    若X->Y,且Y是X的子集(对任一关系模式,平凡函数依赖必然成立),就是平凡函数依赖。

    例如:
    在学生表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何一个,这就是平凡函数依赖.

    直白点说,就是只要Y是X的子集,Y就依赖于X。

    非平凡依赖

    定义:
    若X→Y,但Y不是X的子集,就是非平凡函数依赖。

    例如:
    在学生表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学生所在的年级,但年级不是(学号,姓名)的子集,这是非平凡函数依赖.((学号,姓名)就是一个x,学号或者姓名就是一个x')。

    候选码

    本身是一个超码,但是它的任意子集不能是码

    保持依赖

    如果F上的每一个函数依赖都在R1或者R2上成立,则这个分解是保持依赖的

    数据库范式

    • 1NF:属性不可分
    • 2NF:消除非主属性对于码的部分函数依赖
    • 3NF:消除非主属性对于码的传递函数依赖
    • BCNF: 消除主属性对于码的部分与传递函数依赖

    BCNF分解算法

    下面以 R(A, B, C, D), FD{AB→C, C→D, D→A}为例

    先列出所有非平凡依赖

    C→A, C→D
    D→A
    AB→C, AB→D
    AC→D
    BC→A
    BD→A, BD→C
    CD→A
    ABC→C, ABC→C
    BCD→A

    找到所有键

    由上面的所有平凡依赖可以找出所有键:AB, BC, BD

    找出所有违反BCNF的FD(左边不包含键)

    C→A, C→D, D→A, AC→D, CD→A

    分解违反BCNF的依赖

    从C→D开始分解,C+ = ACD
    得到R1 = C+ = ACD,R2 = BC
    其中BC是二元的,满足BCNF
    对ACD,有D→A不符合BCNF,故仍需要分解
    分解为AD和CD
    所以分解结果为AD, CD, BC

    相关文章

      网友评论

          本文标题:数据库设计常见问题

          本文链接:https://www.haomeiwen.com/subject/eaolvktx.html