数据库设计的三大范式

数据库的三大范式是为了减少数据库数据的冗余,让数据库设计更合理话,而且三大范式是递增式的,只有满足第一范式的情况下,才能考虑第二范式,在满足第三范式的前提下,才能考虑第三范式。但是有时候为了提高数据的查询效率,很多数据库设计只满足了第二范式。

实际上还有第四,第五范式等。


现在就让我们来看看三大范式。


第一范式:

每列数据都是不可分割的最小数据(原子性)

idaddress
1中国上海
2中国深圳
像上面这表就没有满足第一范式 应该做如下修改

idcountrycity
1中国上海
2中国深圳

第二范式:

必须满足第一范式,每张表只描述一件事情(每个表只能依赖一个主键)

是不是感觉看了有点迷糊,没关系,我们看看例子

订单编号1
产品编号A1
订购日期2004/4/1
产品单价29¥
这张表是错误的,产品单价是依赖于产品编号的,订购日期的话是依赖于订单编号的,这就不满足了依赖一个主键的含义。

所以应该改成

订单编号1
订购日期2004/4/1
 and

产品编号A1
产品单价29¥
两张分出来的表


第三范式:

第三范式又是满足第二范式的基础上,要求是一个表中不能包含其他列中定义的非主键列

比如说

订单编号1
订购日期2004/4/1
顾客id3
顾客姓名张三
这表就错了,顾客姓名肯定是顾客表里面的非主键列


当然也为了提高查询效率也可以忽略第三范式,经常查询这张表,又要做到顾客姓名的情况下,

就可以忽略第三范式。毕竟如果满足第三范式,你每次查询顾客姓名还得关联顾客表。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值