我有一个
MySQL表,代表一个订单列表和一个相关的子表,代表与每个订单关联的货件(一些订单有多个货件,但大多数只有一个).
每批货物都有许多费用,例如:
> ItemCost
> ShippingCost
> HandlingCost
> TaxCost
应用程序中有许多地方需要获取订单的综合信息,例如:
> TotalItemCost
> TotalShippingCost
> TotalHandlingCost
> TotalTaxCost
> TotalCost
> TotalPaid
> TotalProfit
所有这些字段都取决于相关货件表中的汇总值.此信息用于其他查询,报告,屏幕等,其中一些必须快速为用户返回数万条记录的结果.
在我看来,有几个基本的方法可以解决这个问题:
>使用子查询在需要时从货件表中计算这些项目.对于需要全部或部分此类信息的所有查询,这会使事情变得复杂.它也很慢.
>创建一个将子查询公开为简单字段的视图.这使得需要它们的报告变得简单.
>在订单表中添加这些字段.这些将为我提供我正在寻找的性能,代价是在我对货件记录进行任何更改时必须复制数据并进行计算.
另一件事,我正在使用一个业务层来公开函数来获取这些数据(例如GetOrders(过滤器))并且我不需要每次都使用小计(或者某些时候只需要其中的一些),所以生成一个每次(即使从一个视图)子查询可能是一个坏主意.
是否有任何人可以指出我帮助我决定最佳设计的最佳实践?
顺便说一下,我最终做了#3主要是出于性能和查询简单性的原因.
更新:
很快就得到了很多很棒的反馈,谢谢大家.为了给出更多背景信息,显示信息的地方之一是在管理控制台上,我有一个可能很长的订单列表,需要为每个订单显示TotalCost,TotalPaid和TotalProfit.