问题描述
前台页面展示给客户看页面上有各种维度的数据统计,需要从十几张表中查询不同的数据进行各种统计才能满足需求我的初步设想是设计N张冗余表,定时填充统计结果,但是统计需求不定期变化,冗余表也要跟着变动,甚至是颠覆性的变革,相当于统计重新做或许有人认为冗余表设计不合理,我想知道什么样的冗余表设计才算合理,我最早是完全按照页面统计好的结果数据设计的表,但页面变动表全废,再后来根据业务抽取必须要统计的,其余部分参照页面展示的结果去建表,定时统计填充数据现在突然多了很多很多要统计的东西,如果全部冗余设计,稍微变动统计维度可能就是一场地震,直接查询统计不冗余的话又太慢了苦思不得其解,不知各路大神有没有更好的统计方案可以减少变更时对统计功能的影响没有接触过BI不知道BI工具统计的数据是不是可以展示到页面上
解决方案
解决方案二:
应该尽力避免需求频繁变化,如果避免不了,应该趁早放弃。
解决方案三:
你要搞清楚什么叫做“冗余表”。可能你从前任软件设计者那里接手了这个产品,但是你并没有理解它原来的意思,所以自己发明了这个含糊的词儿。比如说在Excel上画企业表格,那么我们就会说“【第一水厂】【原水水质】【二氧化氮】那一行,在【2016年5月】那一列,值为3.49”。也就是说,一个二维表上的数值,它至少是“行、列、值”这样的三元对象。如果是一摞表(多张表),那么再增加一个表格维度。如果“行”或者“列”标题是分组的,那么它可能是组合键。统计结果必定要保存起来。因为假设有一个表计算一次要15秒钟,10个领导,要在各自的远程终端刷新10000次报表,难道你要给它重新计算15万秒吗?显然在第一个领导第一次查询报表之前计算一次就够了,以后都是直接取结果,而决不可能进行什么计算。因为领导,它等不了1秒钟!“进行计算”这个说法是非常幼稚的,不是干实际项目的,是学生的想法。但是最终表格的样式确实是变化的,而底层的“快表”不能总是变化。所以你要抽取出表格的本质特征,用其本质特征来保存离散数据。例如上述报表叫做“各分公司水质月报”,那么里边有15万数据,记录了40个分公司、一共15年的水质数据。这个月报总共不过就是5列、15万行数据。不管谁知月报的样式怎样变化,数据都是从这里直接抽取的。
解决方案四:
水质所以对于“冗余表”,搞清楚什么才叫做真的冗余。你的前任或者你的老师可能是从细节入手的,而你把这个理念理解为“冗余”,那就是跑偏了。
解决方案五:
我判断,你并不是自己想出的那个朦胧的想法。但是你没有搞明白,所以无法实现设计。
解决方案六:
一个报表的前端展示层,它绝不做统计计算。它解释报表的需求,然后组合为“[{行:"....",列:"....."},{行:"....",列:"....."}.....]的需求发给服务器,从服务器上直接拿到数据之后放到各个位置直接展示就行了。报表系统不做任何统计计算,它集中于展示,集中于处理报表样式的变化。计算是另一个”数据中心“系统做的事情。它具有各种Agent终端分布在全国各地、各种服务器上,从各个业务系统中推送或者拉取数据,然后进行统计计算,然后把结果传给报表系统。它有一套配置和控制方式,能够远程智慧数据的采集方法、路由方法、临时汇总统计方法。每一个系统都只干最简单的事情。一个报表系统,它不干统计工作。除非你们没有能力思路去单独设计一个“数据中心系统”。
解决方案七:
抽取表的本质特征,各分公司水质月报我现在确实是按照这个思路做的,但后续还有对这个本质特征表再做统计的需求,正因为不愿意让用户等待,所以在特征表后面又加了n张统计表来存储再次的统计结果这个是我设计的,正因为有缺陷所以来看看大家有没有什么好的建议,至于是不是应该叫冗余表不重要,重要的是对于抽取的特征表后面更多维度的统计我是不是只能设计“冗余表”才能满足需求
解决方案八:
解决方案九:
该回复于2016-06-12 12:34:50被版主删除
解决方案十:
不知道你的冗余表是什么东西,还要定时充填(由谁来填)正因为被查询的数据可能分布在多个表中,查询指令可能会很复杂,所以数据库提供了view(视图)来帮你做摘要任何视图中所包含字段的发生变化时,这个变化就立刻反映在视图中获取视图内容和获取表内容的操作是一样的select*from视图名
解决方案十一:
解决方案十二:
learning~
解决方案十三:
解决方案十四:
看看是什么~
解决方案十五:
我避免建立冗余表的方法是写程序的时候把需要用的表/列获取到然后起个别名,程序随开随获取数据。这样数据库可以一直保持整洁。
解决方案:楼主的意思可能是不同的冗余表对应不同的统计报表吧,现在统计功能变化就变的要去改冗余表结构跟统计代码了。冗余表只为一个报表工作不好,字段再细一点,一遍满足不同需求吧,感觉可以利用视图对应满足不同统计报表,就不用改统计代码和表结构了,只需改视图的sql就好。我是小白,蛮说说
解决方案:这个不是应该交给View做吗?通过视图,让数据库去统计计算,而不是调用程序通过sql实时计算。sql基本功不够啊
解决方案:其实楼主可以对查询结果缓存,而不必建立冗余表。
解决方案:你们叫“冗余表”?这名字多low……一看就不是好东西我们叫“汇总表”,这名字一看就知道是对已有数据的汇总,虽然数据在整体上存在冗余,但这种亢余是可以接受的而且不管怎么优化,汇总一般都是必经步骤,唯一的区别就是你汇总的程度