Often I deal with aggregate or parent entities which have attributes derived from their constituent or children members. For example:
The
byte_count
andpacket_count
of aTcpConnection
object is computed from the same attributes of its two constituentTcpStream
objects, which in turn are computed from their constituentTcpPacket
objects.An
Invoices
object might have atotal
which is basically the SUM() of its constituentInvoiceLineItems
' prices, with a little freight, discount and tax logic thrown in.
When dealing with millions of packets or millions of invoiced line items (I wish!), on-demand computation of these derived attributes -- either in a VIEW or more commonly in presentation logic like reports or web interfaces -- is often unacceptably slow.
How do you decide, before performance concerns force your hand, whether to "promote" derived attributes to precomputed fields?