数据库设计 – 管理更新 – 审核 – 发布工作流的最佳方法?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 管理更新 – 审核 – 发布工作流的最佳方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我管理在线目录.目前,内部人员手动更新,并且可以立即看到他们的更改.现在我们要添加一个验证步骤:Tom做出改变,Jerry批准了.

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

>保留整个数据库的第二个“工作副本”.
>在同一个数据库中保留第二组“脏”表.

这两者似乎都需要大量的代码才能用于内务处理,并且只要表的结构发生变化就会使工作量增加一倍.

有没有更好的办法?如果重要,DBMS是sql Server,Web应用程序是asp.net.

编辑添加

>我上面概述的两个更改都与现有代码向后兼容.我知道我将不得不进行一些更改,但我不能改变每一个查询.
>我认为我的关键约束禁止简单地克隆行并将它们标记为“待定”.

假设供应商ID为99的供应商有两种产品. (产品只能属于一个SupplierID.)供应商的电话号码已更改,因此我克隆了供应商记录,更改了电话号码,并将其标记为“待处理”.但新记录的ID不能为99,因此不再有办法将其连接到其产品甚至是它要替换的记录.

我想我可以添加一个无约束的标识符SupplierPseudoID,但这似乎与上述想法一样复杂且容易出错.

解决方法

你为什么需要这些表的副本?为什么不在表格中添加已批准的字段呢?

回答编辑:

如果你有一张像这样的桌子

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

你可以改变它来添加一个名为appoved的新字段,并使主键既是id又是修改

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

您创建的视图只会带给您

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

通过将其定义为SELECT id,name,text,modified等FROM FROM目录WHERE approved = 1;,这样您只需修改查询选择的“表”.为了避免必须修改插入,您应该给出批准的默认值0并修改更新查询以执行类似的操作

  1. INSERT INTO catalog (id,modified,etc,approved)
  2. VALUES (SELECT id,NOW(),0)

最终会有类似的东西

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

以及你需要做的“批准一个领域”的新界面必须要做的

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

这将导致

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

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

这是一个非常模糊的例子,适应您的需求.

猜你在找的MsSQL相关文章