定期的に処理する必要のあるイベントのリストがあります。プロセスはしばらくの間イベントを処理しますが、その後、再度処理する必要があります。つまり、イベントごとに、イベントが「処理」された日付範囲のリストが表示され、ギャップがある場合は、その時点でイベントが未処理の状態であったことを意味します。このために、2つのテーブルを使用します。
テーブルプロセス
ProcessID int PK NOT NULL
EffectiveDays int NOT NULL
テーブル処理
EventID nvarchar(128) NOT NULL
ProcessID int FK REFERENCES Processes NOT NULL
DateProcessed int NOT NULL
EventIDは、SQLクエリの結果に基づいて標準的な方法で動的に生成され、実行全体で一定であることを保証します。
このシグニチャを使用してメソッドを実装できるようにしたいと思います(ループで呼び出す必要がある場合があります)。
bool Event.WasProcessed(DateTime AsOf)
特定の日付について、イベントが発生した状態(処理済みかどうか)を照会できる必要があります。したがって、提供された日付が(重複する可能性のある)日付範囲のいずれかにあるかどうかを確認する必要があります。
このクエリをSQLで実行するのかコードで実行するのかさえわかりません。クエリは、任意の一連のイベント(各イベントを保持するオブジェクトと処理のリストで表す)で実行する必要がある場合があるため、SQLで実行すると、DBにかなりの影響を与える可能性があります。一方、SQLは一般的にクエリで高速です。一方、この同様の問題は、カーソルベースのソリューションがとにかく必要であることを示しています。
たとえそれらがより良い検索文字列であるとしても、どんなポインタでもありがたいです。(日付範囲の問題をグーグルで検索するには、ある程度のスキルが必要なようです。)