我有一张销售订单行表(sDetail);记录上有一个索引,它实际上是一个候选索引,其中包含Order引用的键加上STR(行号)。这用于检索特定订单的行。
sDetail表上还有一个主要索引,它是一个顺序ID。
订单可能会被修改。如果用户删除了订单行,我会在此表中将该记录标记为已删除;当我处理时,我通常使用SET DELETED ON运行,因此用户不会看到这些已删除的记录。
如果他重新创建该行,我可能会产生错误'违反索引的唯一性'我明白了。为避免产生此错误,我可以看到两种可能的方法:
在索引'FOR!DELETED()'中包含过滤器表达式,以便这些记录在运行时不可见
或者:当我希望测试特定行的记录是否存在时,SET DELETED OFF,测试记录是否存在,并在必要时调用它。然后恢复为SET DELETED ON。
其他开发者做了什么?或者有更好的方法吗?
谢谢
答案 0 :(得分:1)
没有一条规则是刻在石头上的。回忆是我使用的方式之一(我很少需要召回)。我个人不喜欢!deleted()类型索引(如果我使用然后我创建为位图索引)。
第三种选择是不要将这样的索引作为“候选人”。如你所说,lineNo的唯一目的是订购它不应该是候选索引。