0

販売注文明細 (sDetail) のテーブルがあります。レコードには、Order 参照と STR( 行番号) のキーを持つ事実上の候補インデックスであるインデックスがあります。これは、特定の注文の明細を取得するために使用されます。

シーケンシャル ID である sDetail テーブルにもプライマリ インデックスがあります。

注文は修正される場合があります。注文明細がユーザーによって削除された場合、このテーブルでレコードを削除済みとしてマークします。処理中は通常、SET DELETED ON で実行するため、ユーザーにはこれらの削除されたレコードが表示されません。

ただし、彼が行を再作成すると、「インデックスの一意性に違反しています」というエラーが発生する可能性があることは理解しています。このエラーの発生を回避するために、次の 2 つの方法が考えられます。

いずれか: インデックス 'FOR !DELETED()' にフィルター式を含めて、これらのレコードが実行時に非表示になるようにします。

または : 特定の行のレコードの存在をテストしたい場合は、SET DELETED OFF でレコードの存在をテストし、必要に応じて RECALL します。その後、SET DELETED ON に戻ります。

他の開発者は何をしていますか?それとももっと良い方法がありますか?

ありがとうございました

4

1 に答える 1

1

石に刻まれたルールは 1 つではありません。リコールは私が使用する方法の 1 つです (リコールが必要になることはめったにありません)。私は個人的に !deleted() 型のインデックスが好きではありません (使用する場合は、ビットマップ インデックスとして作成します)。

3 番目のオプションは、そのようなインデックスを「候補」にしないことです。あなたが言ったように、その lineNo の唯一の目的は、候補インデックスであってはならないことを注文することです。

于 2016-07-19T14:27:34.580 に答える