数据分布于不同的地点,用户可将数据提交到上级部门,上级部门也可将数据导出到下级部门.每个地点的主要数据由两个表组成,关系如下:项目表(Project)和项目成员表(People),People表的主键是PeopleID,用于标识唯一的一个成员,PeopleID的最成由一个地点编码和一个自增的数值组成(PeopleID的编号必须是程序自己完成,客户要求是这样),例如A地的地点编码就是A,而自增数值由另一个表(SEQ)来产生(SEQ只有一列,列名为NO),每添加一个成员就往SEQ添加一条记录,例如A地当前SEQ表NO的最大值是10,那么产生一个新的PeopleID就是"A11",同时往SEQ插入一行,数值是11.Project表和People表的关系是一对多.在正常情况下,无论是下级向上级提交还是从上级往下级导出都不会存在问题,但是在某些情况下可能会出现问题,假设A地数据库损坏了,需要从上级往下级导出数据,当在A地再添加项目成员时就会出现问题,因为SEQ表被清空了,所以再添加的PeopleID变成了A1,事实上现在People表已经存在PeopleID为A1的成员了,这时必然会出错,该如何解决这个问题啊???曾考虑过PeopleID由GUID来完成,但客户不肯,说太长了,不易检索,晕啊............

解决方案 »

  1.   

    偷偷放个guid,不给他看,
    引用都用guid,报表关联到直观一点的id
    坏了根据guid再生成一个id,跟之前不同也没关系
      

  2.   

    上级向下级导出的时候,启动一个触发器.动态生成一个SEQ表.表中的内容就从People中截取某区ID最大的.不过可能存在某区最大ID的那个人还没有在people表中生成记录.你也可以另外加用文件存取啊.把数值每次写入一个文件也一样的.从文件中得比恢复一个数据库要好些吧.另外再有用事务,每次加人时给最上级一个多少人的数值存着.