数据库的反范式设计

范式设计可以消除数据库的数据冗余及插入异常,但是过分的范式设计可能导致数据查询时需要关联多张表,导致数据库查询效率下降,因此在实际工作中,需要适当的反范式设计。

举例说明,某在线图书销售网站,希望实现如下功能: 1)用户登录 2)用户管理 3)商品展示 4)商品管理 5)供应商管理 6)在线销售

符合三范式的数据库设计

用户信息表 : 用户名(主键),密码,姓名,手机号,注册日期

图书信息表 : 图书名称(主键),出版社名词,图书价格图书描述,作者

分类信息表 : 分类名词(主键),分类描述

图书分类表 : (图书名词,图书分类)(主键)

供应商信息表:出版社名词(主键),地址,电话,联系人,银行帐号

订单表:订单编号(主键),用户名,下单日期,物流单号

订单图书关联表 : (订单编号,图书名称)(主键), 商品数量

在如上的数据库设计中,如果需要查询每个用户的消费总金额

select 用户名, sum(c.图书价格*b.商品数量)

from 订单表 a join 订单图书关联表 b on a.订单编号=b.订单编号

                          join 图书信息表 c on b.图书名称=c.图书名称

group by 用户名

以上查询需要关联3张表,因为在线销售经常会有促销活动,商品价格时而会波动,在以上设计中,如果图书价格发生变化,则查询结果也会发生变化。

如果需要查询下单用户和订单详情

select  a.订单编号 a.用户名 c.图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值