思考:反范式化后再查询订单信息
SELECT a.用户名,a.电话,a.地址,a.订单ID, a.订单价格 FROM `订单表` a
对下面的表进行反范式化后
思考:如何查询订单信息?
SELECT b.用户名,b.电话,b.地址,a.订单ID, SUM(c.商品价价*c.商品数量)as 订单价格 FROM `订单表` a JOIN `用户表` b ON a.用户ID=b.用户ID JOIN `订单商品表` c ON c.订单ID=b.订单ID GROUP BY b.用户名,b.电话,b.地址,a.订单ID
反范式化是指为了查询效率的考虑把原本符合第三范式的表适当的增加冗余,以达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。
为提高io读的效率,牺牲一些存储空间的代价。但是提高了读取数据的效率。
如用户常常会大量查询订单的信息,那么吧用户名,电话,地址和订单价格放入一个订单表中,虽然违反了第三范式,因为订单id,用户名,电话,地址等,存在传递函数依赖,但是由于数据都是在一张表中,方便了sql语句实现,订单信息的读取,从而优化了io性能;
数据库反范式化:符合第三范式基础上适当增加冗余,已达到查询优化的目的;
反范式化:为了查询效率的考虑,把原本符合第三范式的表适当增加冗余,以达到优化查询效率的目的。以空间换取时间的操作。
表的反范式化
范式化与反范式化