我是做企业信息化工作的,大部分时间做的都是MIS系统,或者号称的ERP系统。
有一个问题困扰我许久,百思不得其解:
   关于组织机构变了,历史数据的查询问题?
举个例子:
   山东分公司有3家店,河北分公司有5家店,每年都会对两家分公司的营业额对比查询。
--------------------------------------------- 
                  山东分公司        河北分公司
2002年营业额
2003年营业额
2004年营业额
2005年营业额
2006年营业额 
------------------------------------------------
  我以“组织机构表”为入口,进行关联查询,很容易出来要求的数据。
 
  现在问题来了,比如2007年,总公司把河北分公司的一家店调整给了山东分公司,变成了山东分公司有4家店,河北分公司也有4家店,那么这个查询就有版本的问题了。
--------------------------------------------- 
                  山东分公司        河北分公司
2002年营业额
2003年营业额
2004年营业额
2005年营业额
2006年营业额 

2007年营业额
------------------------------------------------
  “组织结构表”中的组织节点已经变了,还以采用原来的查询逻辑,2007年以前的数据肯定与事实不符,那么应该怎么办?
问了好多人,要么没有想过,要么没有答案!
   听说SAP等系统肯定解决了此问题,不知道思路是什么?望大家不吝赐教!
  

解决方案 »

  1.   

    比较赞同bjt_的想法,给总分公司关系加时间属性能解决问题。
      

  2.   

    感谢三位回复,
    to:bjt
    简单的增加一个年的时间,甚至更精确到日,
    都不可避免ckc提到的年中调整的问题(比如调整时间之前的营业额算这家分公司,调整后算另外一家)!这样的话查询逻辑复杂到了不可写了!
    把“一些结果保存起来作为统计结果表”,倒是可以考虑一下!看看还有高手有没有解决方案?大家熟悉SAP这些国际软件牛们,是怎么解决的?
      

  3.   

    头都大了,顶工作流系统的组织机构管理模型设计,但是没有提到历史数据问题
    http://www.duduwolf.com/wiki/2007/520.html
      

  4.   

    关于历史查询的问题,是非常复杂的,在最初设计的时候如果没有考虑到这点是会有许多问题的。
    可以提出一些解决方案来解决你的特定问题,上面也有人提出来了。
    最基本的思路就如同二楼说的那样,可以建立一个有开始和结束时间的历史组织机构表。
    譬如
      TJG
      公司    分店    开始日期   结束日期
      A        A1     20060101   20061231
      B        A1     20070101   30000101  --这表示无穷远,或者可以用null表示.  有例如有业绩明细表(假设的)
      TYJ
      分店     日期        业绩
      A1       20060101    1000
      A1       20070101    200
    然后再关联查询即可.
      SELECT  A.公司,SUM(B.业绩) FROM TJG A,TYJ B WHERE B.分店=a.分店 and (b.日期 between (a.开始日期 and a.结束日期)) group by a.公司
       
       打开是这样了。这样就要求你们修改一下查询,或者通过建立一些视图来减少修改的工作量