hol*_*den 2 mysql sql postgresql database-design ruby-on-rails
我有一个新表,我将添加到一堆其他汇总数据,基本上通过计算每周avgs来减少一些负载.
我的问题是我是否会因为一个模型而不是另一个模型而变得更好.一种模型,一周中的几天作为一列,另外一列价格或另一个模型作为DOW的一系列字段,每个都需要付出代价.
我想知道哪些可以节省我的速度和/或头痛?或者至少是权衡.
IE浏览器.
ID OBJECT_ID MON TUE WED THU FRI SAT SUN SOURCE
Run Code Online (Sandbox Code Playgroud)
要么
ID OBJECT_ID DAYOFWEEK PRICE SOURCE
Run Code Online (Sandbox Code Playgroud)
我会首先给出以下aggreate模型:
ID | OBJECT_ID | DATE | PRICE | SOURCE
---+-----------+------------+--------+--------
1 | 100 | 2010/01/01 | 10.00 | 0
2 | 100 | 2010/01/02 | 15.00 | 0
3 | 100 | 2010/01/03 | 20.00 | 0
4 | 100 | 2010/01/04 | 12.00 | 0
Run Code Online (Sandbox Code Playgroud)
然后,您可以非常容易且相对快速地聚合上述数据以生成每周/每月/每年的平均值.
要获得每周平均值列表,您可以执行以下操作:
SELECT WEEK(date), AVG(price) FROM table GROUP BY WEEK(date);
Run Code Online (Sandbox Code Playgroud)
对于其他一些示例,以下查询将返回星期日的平均价格:
SELECT AVG(price) FROM table WHERE DAYOFWEEK(date) = 1;
Run Code Online (Sandbox Code Playgroud)
或者可以获得一年中第8周的平均每日价格:
SELECT AVG(price) FROM table WHERE WEEK(date) = 8;
Run Code Online (Sandbox Code Playgroud)
获得月度或年度平均值也很容易:
SELECT MONTH(date), AVG(price) FROM table GROUP BY MONTH(date);
Run Code Online (Sandbox Code Playgroud)
如果上述聚合计算成本太高,我只会选择更多的非规范化选项,例如你提出的两个选项.