我管理一个在线目录.目前,内部人员手动更新,他们的更改立即可见.现在我们要添加一个验证步骤:Tom做出改变,Jerry批准了.
我看到两条路,但似乎都不优雅.
这两者似乎都需要大量的代码才能用于内务处理,并且只要表的结构发生变化就会使工作量增加一倍.
有没有更好的办法?如果重要,DBMS是SQL Server,Web应用程序是asp.net.
编辑添加:
我在上面概述的两个更改都与现有代码向后兼容.我知道我将不得不进行一些更改,但我不能改变每一个查询.
我认为我的关键限制禁止简单地克隆行并标记它们"待定".
假设供应商ID为99的供应商有两个产品.(产品只能属于一个SupplierID.)供应商的电话号码已更改,因此我克隆了供应商记录,更改了电话号码,并将其标记为"待处理".但新记录的ID不能为99,因此不再有办法将其连接到其产品甚至是它要替换的记录.
我想我可以添加一个无约束的标识符,SupplierPseudoID,但这似乎与上述想法一样复杂且容易出错.
你为什么需要这些表的副本?为什么不在approved表格上添加字段呢?
回答编辑:
如果你有一张桌子
id | name | text | modified | etc
-----------------------------------
1 | aaaa | blabla | 20100210 | xxx
2 | bbbb | yadayada| 20100212 | yyy
3 | cccc | asdfkad | 20090102 | zzz
Run Code Online (Sandbox Code Playgroud)
您可以更改它以添加一个名为的新字段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
Run Code Online (Sandbox Code Playgroud)
您创建一个只带给您的视图
id | name | text | modified | etc
-----------------------------------
1 | aaaa | blabla | 20100210 | xxx
2 | bbbb | yadayada| 20100212 | yyy
3 | cccc | asdfkad | 20090102 | zzz
Run Code Online (Sandbox Code Playgroud)
通过将其定义为类似的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)
Run Code Online (Sandbox Code Playgroud)
最终会有类似的东西
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
Run Code Online (Sandbox Code Playgroud)
以及你需要做的"批准一个领域"的新界面必须要做的
UPDATE catalog SET approved = 1;
DELETE FROM catalog WHERE id = @id AND approved = 1 AND MIN(modified);
Run Code Online (Sandbox Code Playgroud)
这将导致
id | name | text | modified | etc | approved
-----------------------------------------------
1 | aaaa | blabla | 20100210 | xxx | 1
2 | bbbb | yadayada| 20100212 | yyy | 1
3 | cccc | qwerklj | 20100219 | zzz | 1
Run Code Online (Sandbox Code Playgroud)
如果您使用触发器或存储过程来执行此操作,则可以进一步简化最后一位.
这是一个非常模糊的例子,适应您的需求.
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |