Frank,
As yet no response from Garry, but I wanted to ask:
You already have DateTable set up (presumably), so extending its application
into a relationship with the
breeding table is no big deal. Given that one suggestion was that Garry could
consider storing monthly
statistics in another table (from breeding), and thus saves processing each
time/only needs to update once per
month and presumably only for the month just passed; wouldn't it make sense
FOR HIM to combine the two
functions? Initially create the MonthlyStats table to contain only year and
month data (which can be related to
'drive' date-oriented SELECTing), and then update/populate each month's row as
and when the stats become
available. It might also offer opportunities to simplify the processing
outlined below.
Creating the monthly statistics and then storing them back in the DB is not
my favorite way to solve the problem. It violates one of the fundamental
rules of good relational database design - that Data is stored in one place
only.
=As it happens I do agree with you, however I'm playing 'devil's advocate' (a tactic
consultants often use to
ensure that people understand the whys-and-wherefores of what's being said).
=In the case of statistical databases the rules of normalisation/good db design are
often varied. Even in
relational applications the argument for de-normalisation frequently comes out of the
usage pattern - it is more
efficient in terms of response time, to 'cache' the answer to an FAQ (in another tbl)
than to repeatedly
calculate it.
=The 'mathematical' argument is to ask if the aggregation/statistics are in fact
multiple instances of the same
data/representation - I'm not even going to start on that one...
For example: if you created the January statistics on February 1 and on
February 2 someone updates the DB with a record that affected January, then
your monthly total is wrong. (I don't know about the rest of you but
occasionally I do get behind).
=it depends how these things are treated. In the case of breeding dogs etc, I imagine
that you're right. However
if there is the concept of a 'cut-off date', eg get your expenses claim in by x-day if
you want them paid during
this accounting month. Then there is a clear distinction between the months that has
little to do with when the
expenses were actually incurred!
=In the case of the breeders, if there was a monthly magazine, then statistics
calculations will have to be
completed in advance of the publication date - regardless of how late some of the data
was to arrive.
=How the data is treated when it arrives late, will vary by application/implication.
The average company
expenses system will put a claim from last month (or even before) through as if it was
a claim for 'this' month
and not worry too much. I've watch sales people play some pretty serious
tactical-games with their signing-up
deals to gain credit within a particular month/quarter...
To fix this you have to check every time someone updates the 'breeding'
table (in this example) and if the dates are in the past you'll have to
recalculate the monthly total (UGLY!!).
So we'd like to calculate the daily totals and monthly averages when called
for unless there is some reason we can't (poor performance perhaps).
=indeed - and whilst we don't know the volumes, the 'demand' does not look
significant, even at ten or one
hundred times the volume stated below!
A DateTable with one record for each day is under 4,000 records for 10 years
of days, since you will never update or delete from it and rarely add to it
you can index the heck out of it. SQL is build for just this kind of
problem.
Just my opinion...
=thanks.
=dn
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]