如何将任务仔细检查(如何将其存储在DB中)?
-
22-09-2019 - |
题
我有一个数据库,可以在不同表中存储不同类型的任务和更多项目。在这些表中的许多表中(它们的结构是不同的),我需要一种方法来完成该项目必须进行双重检查,这意味着该项目不能“保存”(我当然会保存它)在其他人参加该程序并确认之前。
应该说明哪个项目的正确方法是什么:
- 这些表中的每一个都应具有“确认”的列,然后当那个家伙想确认所有内容时,程序将通过所有表行走并创建未检查的项目的列表。
- 应该有一个保存该行的表名和ID的第三个表格必须确认。
- 希望您比上面两个丑陋的主意更好。
解决方案
双重确认的状态是否对实体完全发生?还是可以被拒绝并需要再次确认?在后一种情况下,您需要保留所有这些历史吗?您是否需要跟踪每次确认谁的确认(例如,您没有同一个人执行这两个确认)?
简单的情况:
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。
这种模式在编码和实施方面做了更多的工作,但是根据我的经验,可以显着提高性能并减少缺陷。
不隶属于 StackOverflow