数据统计

来源:互联网 发布:估算胎儿体重软件 编辑:程序博客网 时间:2024/03/29 10:03

 一、在对数据进行统计时,一定要分析清楚表的数据结构,假如是连接了多个表进行的统计则更是如此。在对数据进行多表连接统计时,各表连接后所呈现的数据结构应该是“多叉树结构”或“星型多叉树结构”,而不能是“网状结构”或其它类型的数据结构,而上面所讲的“树型”结构中的叶子节点则是要统计的原始数据。

 

二、要分析表连接后是数据的结构是否为“多叉树”或“星型多叉树”结构,可以通过两个办法分析:

a)         一是至上而下法,即当要从某个根节点查找到某个叶子节点时,有且只有一条路径能到达。而当出现多条路径时,则说明该连接结构为非“树型结构”。

b)        二是自下而上法,即当由叶子节点向上查找时,任何一个非根节点有且只有一个父亲节点。

通过上面的两个方法可以清楚的分析出数据的结构是否为树型结构,如有违反则不是。

 

三、很多时候我们遇到的数据结构不会是标准的树型结构,而更多的可能是非“树型”结构,这时我们就必须将它转换为树型结构才能使用,否则统计数据将会出错。

a)         网状结构,即由叶子节点向上查找时,当一个子节点对应多个父节点时(此处可描述为多对多的关系),称为网状结构。

b)        当我们要统计的数据为网状结构时,我们在产生网状结构的两个节点间将其断开,增加由“叶子”节点出发到断开的父节点的连接通路,这样可以确保该结构满足条件一、二,“非树型”结构转“树型”结构如下:

1)        假设a图是一个我们需要统计的数据的数据结构,但是很显然“c2”节点有两个父节点,所以这样的数据结构肯定是不能符合树型或星型树的结构要求的。如下:

 

a图)

2)        根据上面的要求,我们应该将a图这个结构从b层与c层之间截断开来,并增加由“叶子”节点出发到断开的父节点的链接通路,从而保证数据结构能符合树型结构的要求,如下:

 

b图)

如果是在实际的操作中,这一步的在数据库的表现中既是在叶子节点表“d”中增加一个到“b”表的外键字段,这样的话我们就可以明确,某个叶子节点“d2”是具体来自哪个“c2”节点的父节点了。

 

四、模块化处理

模块化处理:当一个结构为树型结构时,从某个节点向上取n层,并将其视作一整体,则可将该整体视作一节点来处理,而这在有较多层结构时,将某几层作为一个视图或事先生成的结果集时非常有用,能有助于对项目的理解和简化具体的操作,如下:

 

c图)

       (备注:切记,在将树型结构中某几个连续的层看成一个整体而使用时,只能连接该整体的叶子节点,而万万不能连接该整体的其它节点,因为多叉树的非叶子节点导致某节点重复出现,实际上多表连接而型成的结果集是所有节点的对应路径,因为一个非子节点可能有多个子节点,所以会出现重复。)

 

五、总结

通过以上步骤,特别是步骤“三”,非树型结构最终转换成“星型树结构”。星型树结构,即从任何一个“根节点”到“叶子”节点都符合树型结构的定义,如下:

 

d图)

无论从“根节点”MNA中的任何一个出发到叶子节点C,都有且只有一条路径可以到达,也就是说从C出发往任何一个方向,它都符合树的定义,所以我称之为“星型树结构”。

如此连接出来的表便可方便准确地统计叶子节点了,并且可以很方便的知道每个叶子节点是来自于哪个根节点,而不会出现一个叶子节点可能出现多个路径的情况,这样对于有许多条件的统计查询来说是必不可少的。

原创粉丝点击