业务流程:一张卡片由一个最低层的单位录入数据,并上报(上报过程可能有N级)到上一级单位,也有可能越级上报。上一级单位可以选择接收或退回,一旦接收后,只能退回,不可删除;且下一级的单位只能浏览,不能修改;未接收的时候,下一级单位可以取消上报。一条记录里应该能明确看出上报的过程和时间以及单位等信息,这样便于查询统计。
想了很久也没有好的办法,希望大家帮忙!!!
(本来可以用多条记录来实现这个流程,但我想用一条记录就可以表示,不知道能不能实现?)。

解决方案 »

  1.   

    用两张表处理比较便于查询,建议采用楼上所描述的方式。
    如果一定要记录在一个字段里,用一个varchar(8000)/text字段记录业务流程,每次处理都在text字段最后追加最新的处理信息。
      

  2.   

    建4张表
    2张预设流程。即所有卡可能的所有流程。类型->流程
    2张实际流程。即实际用的卡选择的流程。卡->流程这样可以通过卡->类型的对应,去查询预设流程表获得实际流程。就可以实现你的要求了。
      

  3.   

    我建议你选择三个表。
    一个表记录卡片信息,一个表记录上报单位,这些单位是有层次的,你可以关注我的blog
    http://blog.csdn.net/geniusli/archive/2006/03/16/626155.aspx
    来解决分层问题。
    前两个表是多对多的关系,所以还需要一个关系表来存放上报信息。t_cardinfo
    -------------------------
    cardid varchar(20)
    cardname varchar(30)
    carddate datetime
    ...
    ...t_company
    -------------------------
    companyid varchar(20)
    companyname varchar(20)
    ...
    ...t_cardcompany
    -------------------------
    cardid varchar(20)
    companyid varchar(20)
    是否批准 boolean
    是否退回 boolean
    上报日期 datetime
    批准日期 datetime
    退回日期 datetime
    ...
    ...
    上一级单位可以选择接收或退回,一旦接收后,只能退回,不可删除;且下一级的单位只能浏览,不能修改;未接收的时候,下一级单位可以取消上报。一条记录里应该能明确看出上报的过程和时间以及单位等信息,这样便于查询统计。
    至于以上的功能,不规数据库分析与设计问题,是业务规则。
    比如:未接收的时候,下一级单位可以取消上报
    解决:是否批准为空时可以删除此卡其实所有数据都是在一个数据库内变动,并没有存储在上级单位的电脑上,上级单位看到的只是一个view。