gpt4 book ai didi

database-design - 管理更新-审查-发布工作流程的最佳方式?

转载 作者:行者123 更新时间:2023-12-02 07:53:01 27 4
gpt4 key购买 nike

我管理一个在线目录。目前,内部人员手动更新,他们的更改立即可见。现在我们要添加一个验证步骤:Tom 进行更改,Jerry 批准。

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

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

这两者似乎都需要大量代码来进行内务管理,并且每当表结构发生变化时,工作量就会增加一倍。

还有更好的办法吗?如果重要的话,DBMS 是 SQL Server,Web 应用程序是 asp.net。

编辑添加:

  1. 我上面概述的两项更改都与现有代码向后兼容。我知道我必须进行一些更改,但我无法更改每个查询。

  2. 我认为我的关键约束禁止简单地克隆行并将其标记为“待处理”。

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

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

最佳答案

为什么需要表格的副本?为什么不在表格上添加一个 approved 字段呢?

<小时/>

编辑答案:

如果你有一张像这样的 table

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

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

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

您创建的 View 只会带给您

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 等 FROM Catalog WHEREroved = 1; 之类的内容,这样您只需修改查询从中选择的“表”即可。为了避免修改插入,您应该为已批准的默认值指定 0 并修改更新查询以执行类似

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

最终会得到类似的结果

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

并且您必须执行“批准字段”的新界面

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

如果您创建触发器或存储过程来执行此操作,最后一点可以进一步简化。

这是一个非常模糊的示例,请根据您的需求进行调整。

关于database-design - 管理更新-审查-发布工作流程的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com