用于Web App建议的MYSQL摘要表

时间:2010-11-26 13:25:57

标签: sql mysql database-design web-applications

我有一个数据库,其中我有许多表格中的数据,例如

TABLE Cars (stock)
---------------------    
Model   colourid  Doors
----------------------
xyz       0       2
xyz       1       4

TABLE Colour

Colourid  Name
---------------------
0         Red
1         Green

我需要制作几个常规摘要,例如格式的夏日摘要。

         | colour               |  Num Doors
Model    | red   green   blue   |  2   4   5   6
---------|----------------------|------------------
XYZ      |  1     2      3      |  4   5   3   5    <<< Numbers in stock

更新 - “汽车可以安排门,例如2门车或4门车。在摘要中,它显示了特定型号的每个门配置的库存车数,例如,有4辆车xyz有2个门。请记住,这只是一个例子,汽车可能不是最好的例子,我当时可以拿出来“

不幸的是,重新排列表可能会使它们更适合摘要,但不能用于日常操作。

我可以想出几种方法来生成这些摘要,例如/多个SQL查询,并将表放在表示级别,SQL级别UNION具有多个查询,VIEWS具有多个嵌套查询或最后cron作业或触发器代码以生成数据包含适合摘要查询和报告的数据的汇总表。

我想知道是否有人可以给我一些指导,因为这些方法效率不高,在多用户环境中变得更糟,并且可能需要定期摘要。

2 个答案:

答案 0 :(得分:2)

我认为您需要一个数据仓库解决方案 - 基本上只是为了报告目的而构建一个新模式,并定期填充这些表。

汇总表可以有多种更新机制 -

  1. 后台工作计划定期执行此操作。如果不需要最新信息,这是最好的。

  2. 使用主要事务表上的触发器更新摘要表。这可能会有些复杂,但如果您需要最新信息,可能会有所保证。

  3. 只要在显示报告之前绘制报告,就更新报告表。您可以使用一些锚值来确保您不会过于频繁地重新计算整个报表,只需在上次绘制报表后考虑新行或新更新的行。

  4. 唯一的问题是,只要在透视列中添加新值,您就需要多次更改表。

答案 1 :(得分:0)

Roopesh的回答只是一个小变化

根据数据库的大小,可用的服务器资源,运行这些报告的频率,特别是如果您不能允许过时报告,您可能在概念上与上面相同,但不使用真实表,但视图

以下是两个可以帮助您入门的链接

注意:

  • 与实现结果相比,您不必运行任何DDL(甚至可以跳过CREATE VIEW并使用直接动态SQL)
  • 复杂度 可比较,但略低(在物化方案中添加新值需要1)ALTER TABLE ADD COLUMN,2)INSERT;使用这种方法,您只需修改SELECT以分析另一个案例。基本上复杂性与INSERT相同)
  • 如果用户直接从数据库中多次查看报告,性能可能会更差,但如前所述,它也可以保证数据是新鲜的