代码之家  ›  专栏  ›  技术社区  ›  egrunin

管理更新审阅发布工作流的最佳方法?

  •  8
  • egrunin  · 技术社区  · 16 年前

    我看到两条路,但似乎都不优雅。

    1. 在同一个数据库中保留第二组“脏”表。

    有更好的办法吗?如果有关系,DBMS是SQL Server,web应用是asp.net。

    编辑以添加:

    1. 我上面概述的两个更改都与现有代码向后兼容。我知道我得做些改变,但我不能改变

    2. 我认为我的主要限制是禁止简单地克隆行并将它们标记为“挂起”。

    我想我可以添加一个无约束的标识符SupplierPseudoID,但是这似乎和上面的想法一样复杂和容易出错。

    3 回复  |  直到 16 年前
        1
  •  6
  •   Esteban Küber    16 年前

    你为什么需要这些表格的复印件?为什么不添加一个 approved


    id | name | text    | modified | etc
    -----------------------------------
    1  | aaaa | blabla  | 20100210 | xxx
    2  | bbbb | yadayada| 20100212 | yyy
    3  | cccc | asdfkad | 20090102 | zzz
    

    您只需修改它,添加一个名为 appoved 并将主键设为 id modified

    id | name | text    | modified | etc | approved
    -----------------------------------------------
    1  | aaaa | blabla  | 20100210 | xxx | 1
    2  | bbbb | yadayada| 20100212 | yyy | 1
    3  | cccc | asdfkad | 20090102 | zzz | 1
    3  | cccc | qwerklj | 20100219 | zzz | 0
    

    id |名称|文本|修改|等
    -----------------------------------
    1 | aaaa |布拉布拉| 20100210 | xxx
    2 | bbbb | yadayada | 20100212 | yyy年
    

    把它定义为 SELECT id, name, text, modified, etc FROM catalog WHERE approved = 1; 0

    INSERT INTO catalog (id, name, text, modified, etc, approved) 
      VALUES (SELECT id, name, text, NOW(), etc, 0)
    

    结果会是

    id |名称|文本|修改|等|批准
    1 | aaaa |布拉布拉| 20100210 | xxx | 1
    2 | bbbb |雅达| 20100212 | yyy | 1
    3 |中交| asdfkad | 20090102 | zzz | 1
    

    你要做的新的界面“批准一个字段”必须

    UPDATE catalog SET approved = 1;
    DELETE FROM catalog WHERE id = @id AND approved = 1 AND MIN(modified);
    

    id | name | text    | modified | etc | approved
    -----------------------------------------------
    1  | aaaa | blabla  | 20100210 | xxx | 1
    2  | bbbb | yadayada| 20100212 | yyy | 1
    3  | cccc | qwerklj | 20100219 | zzz | 1
    

    如果您使用触发器或存储过程来实现这一点,那么最后一位就可以简化得更多。

        2
  •  1
  •   HLGEM    16 年前

    我将有一个approved字段,并且我将在该字段上有一个触发器,该触发器将限制对approved状态的更改仅来自具有指定approver角色的用户(如果您的用户没有角色或组类型的内容,那么您还需要知道哪些是授权用户和approver)。那样的话,如果萨姆试图批准他自己的改变,那就不会发生。我可能还会有一个检查机制,以确保做出更改的审批者必须让其他人批准他的更改。

    您的应用程序还必须进行更改,以使目录的普通用户只能看到已批准的更改,除非他们是发起更改的人或批准者。

        3
  •  1
  •   Will Hartung    16 年前

    只需使用状态设置重要表的版本。

    在表中添加“生效日期”范围。

    select * from catalog where item_code = '1234' and status = 'APPROVED' and
    today >= start_date and (today <= end_date or end_date is null)
    

    然后你的评论者就可以看到了。

    当您“发布”时,当前的“已批准”变为“已存档”,结束日期=“今天”,并且“审阅”行变为“已接受”,结束日期为空,开始日期为“今天”。

    很好的一点是,如果你愿意的话,快速“回滚”一个变化是相当琐碎的,而且你总是有一段历史。以后,如果您愿意的话,可以清除旧的存档数据。