我有一个数据库,可以在不同表中存储不同类型的任务和更多项目。在这些表中的许多表中(它们的结构是不同的),我需要一种方法来完成该项目必须进行双重检查,这意味着该项目不能“保存”(我当然会保存它)在其他人参加该程序并确认之前。

应该说明哪个项目的正确方法是什么:

  1. 这些表中的每一个都应具有“确认”的列,然后当那个家伙想确认所有内容时,程序将通过所有表行走并创建未检查的项目的列表。
  2. 应该有一个保存该行的表名和ID的第三个表格必须确认。
  3. 希望您比上面两个丑陋的主意更好。
有帮助吗?

解决方案

双重确认的状态是否对实体完全发生?还是可以被拒绝并需要再次确认?在后一种情况下,您需要保留所有这些历史吗?您是否需要跟踪每次确认谁的确认(例如,您没有同一个人执行这两个确认)?

简单的情况:

ALTER TABLE dbo.Table ADD ConfirmCount TINYINT NOT NULL DEFAULT 0;
ALTER TABLE dbo.Table ADD Processed BIT NOT NULL DEFAULT 0;

当第一个确认时:

UPDATE dbo.Table SET ConfirmCount = 1 WHERE PK = <PK> AND ConfirmCount = 0;

第二次确认:

UPDATE dbo.Table SET ConfirmCount = 2 WHERE PK = <PK> AND ConfirmCount = 1;

拒绝时:

UPDATE dbo.Table SET ConfirmCount = 0 WHERE PK = <PK>;

现在显然,您的背景作业只能在处理= 0的情况下处理行 确认=2。然后,当它处理该行时:

UPDATE dbo.Table SET Processed = 1 WHERE PK = <PK>;

如果您的场景比这更复杂,请提供更多详细信息,包括双重验证过程的目标。

其他提示

考虑添加一张新表格以保留要确认的记录(例如,taskStobeConfirSed)。确认记录后,将这些记录移至永久表(任务)。

添加“ IS确认”列的缺点是,几乎每个使用该表的SQL语句都必须在“ ISConculded”上过滤以防止获得未确认的记录。每当错过这一点时,都会引入缺陷。

如果您需要确认和未经证实的记录,请使用Union。

这种模式在编码和实施方面做了更多的工作,但是根据我的经验,可以显着提高性能并减少缺陷。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top