秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助。本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式。

第一范式(列不可拆分)

如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了。简单点说就是 不能有表中表,所以关系数据库都满足第一范式。例子略。

第二范式(完全依赖)

第二范式是在第一范式的基础上, 保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分)。

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

 订单信息表

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键完全相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

第三范式(消除非主属性对键的传递依赖)

第三范式是在满足第二范式的基础上,保证所有非主键都 跟主键直接相关而不是间接相关。如下表所示:
订单编号客户编号客户姓名联系方式
0011张三1234567
0022王麻子1222222
0033李四7654321

如上图所示,一定订单只有一个客户,把订单编号作为主键,上表每个属性都依赖于订单编号,依赖的意思是说订单编号相等时,其他属性也得一样。那么就有定单编号确定客户编号,而客户编号又可以确定客户姓名,这就产生了一个传递关系,所以不满足三范式。要满足三范式,应该拆分为两个表,一个是订单信息表,一个是客户信息表。一般我们设计数据库中得满足第三范式。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值