浅谈数据库设计三范式

     设计过数据库的童鞋,一定对数据库设计三范式有一定的了解,这是数据库设计的基本原则,但是设计数据库是不是非得要按这三个范式进行呢?未必,在某些情况下(1:n,1:1的情况),适当的违反三范式,增加一点数据冗余,可以给我们带来便利。

 

     谈起数据库设计三范式,你一定会被它那抽象的定义给搞晕,什么部分关系依赖,传递关系依赖,关键字与非关键字等等等。下面就通俗的介绍下数据库三范式:

 

     1、一个属性用数据库的一个列表示。现在的关系型数据库都遵守这个范式,所以你想违反都难。

 

     2、比如有一个选课表含有如下几个字段:

 

          (学号, 姓名, 年龄, 课程名称, 成绩, 学分)

 

          我们知道通过学号和课程名称可以确定其他字段即:(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

          但是我们又发现:

                   (课程名称) → (学分)
                 (学号) → (姓名, 年龄)

        这就违反了第二范式:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,在上例中非关键字段学分存在对关键字段课程名称的部分函数依赖。

 

      3、如果有如下关系 (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
       这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
       (学号) → (所在学院) → (学院地点, 学院电话)

           即非关键字段学院地点存在对关键字段学号的传递函数依赖。

 

      如果还不理解,可以查看附件里的相关资料,个人觉得讲的不错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值