mysql三大范式和反范式设计的理解

第一大范式:数据库表中的所有字段都只具有单一属性。

idname-age
1李雷-19
2韩梅梅-18


表中name-age字段合为一列,违反了第一范式,应该拆分为两列

idnameage
1李雷19
2韩梅梅18

第二大范式:要求表中只具有一个业务主键。也就是说不能存在非主键列,只对部分主键依赖。

有两张表:订单表,产品表

订单表ID(主键)订单时间产品ID
12020-04-112
12020-04-113
产品ID名称
2奶粉
3奶瓶

订单表中的订单时间违反了第二范式,订单时间冗余,订单表和订单表没有强关联,所以应该将其才分为订单表、中间表、商品表

 

订单表ID(主键)订单时间
12020-04-11
订单表ID(主键)产品ID
12
13
产品ID名称
2奶粉
3奶瓶

 

第三范式:指每一个非非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖。(间接依赖

订单表ID(主键)订单时间客户编号姓名
12020-02-111李雷
22020-02-112韩梅梅

其中客户编号和订单ID关联,客户编号和姓名关联,姓名和订单表ID关联,姓名和订单ID产生间接依赖的关系。应当将姓名列去掉。

虽然三大范式是为了解决数据库冗余的问题,但是阿里开发手册中提到可以适当的违反范式,允许少量的冗余,以便提高查询效率,也就是使用空间换时间。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值