数据库设计 三范式

 

建立冗余小,结构合理的数据库,设计数据库时必须准许你一定的规则,在关系数据库中的这种规则就成为范式.是要符合某一种设计要求的总结

 

要想设计一个合理的关系数据型数据库库,就必须满足一定的范式

 

 

1 第一范式.(确保每列的原子性), 每个列的值只有一个

 

 

也是最基本的范式. 如果数据库表中的所有字段值是都不可分解的原子值.

 

例如 ,用户信息表中.

 

 

但是这个并不是一个规范化的关系.因为电话可以进一步分解.包含两个子属性.长途好和家庭电话.

使表达到第一规范化要求很简单, 只需要把子属性提升为一般属性就满足了第一规范式要求.

 

 

 

2  第二范式 (确保表中的每列都和主键相关)

 

它是在满足第一范式的基础上建立起来的. 第二范式必须先满足第二范式.

 

要求数据库表中的每个实例或行必须可以被唯一区分,完全依赖主关键字, 也就是和主键相关. 而不能与主键的某

一部分相关. 不可以把多种数据保存在同一张数据库表中.

 

比如要设计一个订单信息表,因为订单可能会有多种商品.所以要将订单编号和商品编号作为一个数据库表的联合主键

如下表.

 

订单信息表

 

 

 

就这意味着这个属性决定其他属性.比如(订单编号, 商品编号) 确定 联系方式.

其次,这个关系中还存在其他依赖, 如(商品编号 确定 单位,  价格, 上平名称等) 这里就违反了第二规范式设计原则.

 

一个关系,如果没有满足第二范式,只满足第一范式, 那么就会带来数据的冗余和操作异常.包括,插入异常, 删除和修改异常. 操作异常又经常称为更新异常或存储异常. 

 

这里可以看到 张三在表中出现了两次.这里就存在着大量的冗余的数据.

 

一般可以通过分分解的方法,消除部分依赖.

 

把商品信息分离到另一个表中,把定单项目也分离到另外一个表中,如下图

 

 

 

 

3  第三范式 ( 属性不能依赖于其他非主属性[ 消除传递依赖])

 

第三范式必须先满足第二范式. 要求一个数据库表中不包含已经在其他表中已包含的非主关键字.

 

下面看一个不满足的表

一张employee 雇员表

 

    

 

可以观察到 ,以上表中出现了问题

 

 人力部出现了两次, 而销售部更贱过分,出现了四次,这是不能容忍的.怎么减呢>

 另外增加一个Department部门表. 如下

 

department(deptid, deptname)


雇员表中

employee(empid, ename, deptid)

 

这样就好多了。

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值