首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理更新-评审-发布工作流程的最佳方法?

管理更新-评审-发布工作流程的最佳方法?
EN

Stack Overflow用户
提问于 2010-02-19 20:37:25
回答 3查看 589关注 0票数 8

我管理一个在线目录。目前内部人员手动更新,他们的更改立即可见.现在我们想增加一个验证步骤:汤姆做了一个改变,曾傑瑞同意了。

我看到了两条路,但这两条路都不优雅。

  1. 保存整个数据库的第二个“工作副本”。
  2. 在同一个数据库中保存第二组“脏”表。

这两种方法似乎都需要大量的代码来管理事务,而且每当表的结构发生变化时,工作量就会增加一倍。

有更好的办法吗?如果有关系,数据库管理系统是Server,web应用程序是asp.net。

编辑添加:

  1. 我前面描述的两个更改都与现有代码向后兼容。我知道我需要做一些修改,但我不能更改每个查询。
  2. 我认为我的关键约束禁止简单地克隆行并标记它们为“未决”。

假设SupplierID 99的供应商有两种产品。(产品只能属于一个SupplierID。)供应商的电话号码已经改变,所以我克隆供应商的记录,更改电话号码,并标记它‘待定’。但是新唱片的ID不能是99,所以已经没有办法将它连接到它的产品,甚至是它打算替换的记录。

我想我可以添加一个不受约束的标识符SupplierPseudoID,但是这看起来和上面的想法一样复杂和容易出错。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-19 20:49:36

你为什么需要一份桌子的副本?为什么不直接在表上添加一个approved字段呢?

回答编辑:

如果你有一张桌子

代码语言:javascript
复制
id | name | text    | modified | etc
-----------------------------------
1  | aaaa | blabla  | 20100210 | xxx
2  | bbbb | yadayada| 20100212 | yyy
3  | cccc | asdfkad | 20090102 | zzz

您只需修改它以添加一个名为appoved的新字段,并使主键同时为idmodified

代码语言:javascript
复制
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

您创建的视图只会为您带来

代码语言:javascript
复制
id | name | text    | modified | etc
-----------------------------------
1  | aaaa | blabla  | 20100210 | xxx
2  | bbbb | yadayada| 20100212 | yyy
3  | cccc | asdfkad | 20090102 | zzz

通过将其定义为类似于SELECT id, name, text, modified, etc FROM catalog WHERE approved = 1;的内容,您只需修改查询从中选择的“表”即可。为了避免修改插入,您应该为已批准的默认值0提供一个默认值,并修改更新查询以执行以下操作

代码语言:javascript
复制
INSERT INTO catalog (id, name, text, modified, etc, approved) 
  VALUES (SELECT id, name, text, NOW(), etc, 0)

最后的结果是

代码语言:javascript
复制
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

为了“批准一个字段”,您必须做的新的接口位必须:

代码语言:javascript
复制
UPDATE catalog SET approved = 1;
DELETE FROM catalog WHERE id = @id AND approved = 1 AND MIN(modified);

这会导致

代码语言:javascript
复制
id | name | text    | modified | etc | approved
-----------------------------------------------
1  | aaaa | blabla  | 20100210 | xxx | 1
2  | bbbb | yadayada| 20100212 | yyy | 1
3  | cccc | qwerklj | 20100219 | zzz | 1

如果使用触发器或存储过程来执行此操作,则可以进一步简化最后一步。

这是一个非常模糊的例子,适应你的需要。

票数 6
EN

Stack Overflow用户

发布于 2010-02-19 20:56:22

我将有一个已批准的字段,并且我将在该字段上设置一个触发器,该触发器将对经过验证的状态的更改限制为只来自指定审批角色的用户(如果您没有为您的用户设置角色或组类型,那么您也需要这样做,以便您知道谁是授权用户和审批人。那样的话,如果萨姆想批准自己的改变,那就不可能了。我可能也会有一个机制来检查,以确保一个批准人,谁作出改变,必须由另一个人批准他的改变。

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-19 21:19:02

只需使用状态对重要表进行版本。

相同的表,只是额外的行。向表中添加“生效日期”范围。

代码语言:javascript
复制
select * from catalog where item_code = '1234' and status = 'APPROVED' and
today >= start_date and (today <= end_date or end_date is null)

当您希望更改数据时,复制行,将状态更改为“审阅”(或其他任何步骤,无论您有多少步骤)。

那么你的评审员就能看到了。

当您“发布”时,当前的“已批准”变成“归档”,end_date =“今天”,而“评审”行变成“接受”,并带有空的end_date和start_date =“row”。

这其中的好处是,如果您愿意,快速地“回滚”一个更改是相当微不足道的,而且您总是有自己的历史。稍后,如果您愿意的话,您可以清除旧的存档数据。

你也可以在一个月的第一天才开始出售(或其他什么)商品。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2299372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档