数据库----三范式

  1. 函数依赖

    首先解释一下 A->B 是什么意思。通俗一点说就是 一个A只有唯一的B与其对应b = f(a))。

    A->BA函数决定B,也可以说是B函数依赖于A

    什么是完全函数依赖和部分函数依赖?

    如果A中有真子集 A’ 使得 A'->B,则称A->B部分函数依赖,否则就是完全函数依赖。如果A集合决定了关系的其他所有属性,且不可分!则A为键码

  2. 传递函数依赖

    对于 A->B,B->C ,则A->C传递函数依赖

  3. 数据库中表的异常

    下面给出一张数据库表

    SNOSnameSdeptMnameCnameGrade
    1张三计算机院长1计算机网络90
    2李四自动化院子2操作系统100
    3李四自动化院子2计算机网络70
    4王五自动化院子2操作系统50

    异常:

    • 冗余数据Sname:李四出现了两次
    • 修改异常:修改了一个记录信息,导致另一个记录中的相同信息没有被修改
    • 删除异常:删除一个信息,导致信息丢失
    • 插入异常:插入一个学生信息,但是由于没有选课,则取消添加。

    为了解决这些问题,提出了三个范式

    • 第一范式:属性不可分,意思是每个属性不能在分割。(关系型数据库的基准

    • 第二范式:每个非主属性完全函数依赖于键码

      对于上表,分解前:

      SNOSnameSdeptMnameCnameGrade
      1张三计算机院长1计算机网络90
      2李四自动化院子2操作系统100
      3李四自动化院子2计算机网络70
      4王五自动化院子2操作系统50

      以上的关系中有如下的函数依赖:

      Sno->Sname,Sdept
      Sdept->Mname
      Sno,Cname->Grade
      

      有上述可以看出Sno, Cname 为键码,且Grade 完全依赖于键码

      其他的都是部分依赖于键码

      则可以做出如下分解(表一与表二)
      表一

      SnoSnameSdeptMname
      1张三计算机院长1
      2李四自动化院长2
      3王五自动化院长2

      表二

      SnoCnameGrade
      1计算机网络90
      2操作系统100
      2计算机网络70
      1操作系统50

      上述两表的函数依赖如下:

      表一
      Sno->Sname,Sdept
      Sdept->Mname
      表二
      Sno,Cname -> Grade
      
    • 第三范式

      非主属性不传递函数依赖于键码

      分析:

      表一的关系可以看出:Sno->Sdept->Mname,存在传递函数依赖

      则表一可以进一步分成如下的表

      表11

      SnoSnameSdept
      1张三计算机
      2李四自动化
      3王五自动化

      表12

      SdeptMname
      计算机院长1
      自动化院长2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值