数据库范式判断

步骤

1、求候选键

        R(A B C D)  ,  F = { B ->D , D ->B , A B -> C }

2、非键属性是否部分依赖于候选键

        如果符合,则他是1NF  

       如果不符合,则继续判断

3、非键属性是否传递依赖于候选键

          如果符合,则他是2NF       

          如果不符合,则继续判断

4、判断所有依赖项左边是否全为候选键        

        如果是,则他是BC范式

        如果不是,就是3NF

 

解释部分依赖:

候选键:A B

如果 B -> C,也就是C依赖B

那么C就部分依赖于AB,(理解:C依赖于AB的一部分)

解释传递依赖:

     假设有两个条件:

        1) B ->A,A->C,(C非键,B是候选键)那么B->C

        2) A不能 ->B

这两个条件都满足时,那么就具有传递依赖。如果有传递依赖,就不满足3范式,只能满足2范式

例题1:

R(A B C D)  ,  F = { B ->D , D ->B , A B -> C }

1、找候选键:

        L(只在左边出现的) :A

       然后判断A+导出全部(A+就是A的闭包)

                A+啥也导不出来,所以他不是候选键

        LR(左右都出现的) :B,D

        所以AB和AD是潜在的候选键

        AB+ = {ABCD} = U,所以他是候选键

        AD+ = U (因为D导出了B,而AB+是U)

故此题有两个候选键:AB,AD

2、找非键属性是否部分依赖于候选键,如果符合,则他是1NF,  如果不符合,则继续判断

        候选键是AB,AD。那么非键属性就只有C了。

        和C有关的式子只有AB -> C,而AB是候选键,所以C是由整个候选键导出的

        所以C不是部分依赖,而是完全依赖于候选键,所以至少是2NF

3、非键属性是否传递依赖于候选键,如果符合,则他是2NF , 如果不符合,则继续判断

        C完全依赖于AB,肯定就不会传递了,所以没有传递依赖,所以至少3NF

4、判断所有依赖项左边是否全为候选键,  如果是,则他是BC范式, 如果不是,就是3NF

        AB是候选键,但B不是,因为B在右边出现过,所以不满足左边都是候选键

        

所以此题的最高范式为3NF

例题2:

R(ABC)   F = {A -> B , B->A , A-> C , AB->C , C->AB}

1、求候选键

       L:无

       LR:A,B,AB (灰色用来举例,不包含在此题当中,只是为了说明如果有灰色部分,那么AB也是LR。和单A单B不冲突)

       A+:{A B C} = U ,所以A是候选键

       B+:{ABC} = U ,所以B是候选键

2、非键属性是否部分依赖于候选键,  如果符合,则他是1NF,  如果不符合,则继续判断

         C肯定不是部分依赖,因为左边的全部都是单属性,不能再拆。

        无部分依赖,所以至少2NF
  

3、非键属性是否传递依赖于候选键,   如果符合,则他是2NF , 如果不符合,则继续判断

             

      1)B->A,A->C   

       2)判断A->B?  A不能->B才满足传递依赖,不然就是一个环了,不算传递依赖

                此题A能->B,所以不满足传递依赖,所以至少3NF

4、判断所有依赖项左边是否全为候选键,  如果是,则他是BC范式, 如果不是,就是3NF

      A -> B , B->A , A-> C ,所以依赖项的左边:A,B。

        因为A,B都是候选键。所以满足左边均为候选键,他是BC范式

 

  • 27
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值