我的想法是:为每年的数据建一个表,下一年的数据来了,新增一个表即可。但有一个关键的问题:是用地区还是用指标作为表的列,以2000年的表为例:一、用地区作为列,表结构形如:
        郑州市  开封市  洛阳市  ...
GDP     5亿     3亿     2亿
总人口  500万   400万   300万
...二、用指标作为列
          GDP  总人口
郑州市    5亿  500万
开封市    3亿  400万
洛阳市    2亿  300万用地区作为列的好处是,就单年而言,表结构是固定的,当然不同年份的表的结构是不同的,主要受行政单元变更的影响。
用指标作为列,由于数据是不断增加的,因此表的列数也会随之增加,表结构的变化无疑对数据库的维护不利。
但是,由于这些统计指标应该是作为地区的属性出现的,所以说应该把它们作为列才更符合人们的思维习惯。我感到很矛盾,该怎么办呢?

解决方案 »

  1.   

    用指标做为列好处理些,建议增加两个字段(地区编号、时间)。
    因为分成了 省——地区——县——乡——村共5个级别,所以要考虑地区编号的问题,以方便按地区统计;时间字段方便按时间段统计数据;地区名称  地区编号  GDP  总人口  时间 
    郑州市    0101      5亿  500万  2003.1
    开封市    0102      3亿  400万  2003.1
    洛阳市    0103      2亿  300万  2003.1
      

  2.   

    感谢armu80830(此情可待)!我的想法和你基本相同,我考虑的表结构为:地区代码  时间  指标1 指标2 ... 指标N但是这样的话,如果某年增加了一个指标,就要在这个表中增加一列,老是动表的结构是不是不太好?而且Oracle对表的字段的个数是有限制的吧(我记得8i中好像是2000个),但是据了解系统中的统计指标是非常多的(可能有好几万),这样就得分成好几个表。不知道有没有更好的解决办法?
      

  3.   

    使用星形模型就可以了吧事实表
    ---------------
    地理ID INTEGER
    时间ID INTEGER
    指标ID INTEGER
    指标值 NUMBER再建三个维表:地理维表、时间维表、指标维表
      

  4.   


    地理    时间    指标    指标值
    -----------------------------
    郑州市  2003.1  GDP     5亿
    郑州市  2003.1  总人口  500万
    开封市  2003.1  GDP     3亿
    开封市  2003.1  总人口  400万
    洛阳市  2003.1  GDP     2亿
    洛阳市  2003.1  总人口  300万
      

  5.   

    有道理。
    顺便问一下,Oracle9i中一个表最多能有多少个字段呀?
      

  6.   

    同意米格的建三个维表:地理维表、时间维表、指标维表的模式事实表
    ---------------
    地理ID INTEGER
    时间ID INTEGER
    指标ID INTEGER
    指标值 NUMBER对地区ID表,请考虑用Tree型结构,以表示地区对县(区)的包含范围。
    在实事表中仅记录最底层--县(区)的数据。