Ich habe eine Liste von Ereignissen, die auf einer konstanten Basis verarbeitet werden müssen. Der Prozess kümmert sich für einige Zeit um das Ereignis, woraufhin es erneut verarbeitet werden muss. Das bedeutet, dass ich für jedes Ereignis eine Liste mit Datumsbereichen erhalte, in denen das Ereignis "erledigt" wurde und Lücken bedeuten, dass sich das Ereignis zu diesem Zeitpunkt in einem unverarbeiteten Zustand befand. Dazu verwende ich zwei Tabellen:Suchen, ob ein bestimmtes Datum in einer Liste von Datumsbereichen ist
Tabelle Prozesse
ProcessID int PK NOT NULL
EffectiveDays int NOT NULL
Tabelle Processings
EventID nvarchar(128) NOT NULL
ProcessID int FK REFERENCES Processes NOT NULL
DateProcessed int NOT NULL
EreignisID dynamisch in üblichen Weise auf den Ergebnissen einer SQL-Abfrage basierend erzeugt wird, um sicherzustellen, dass es Konstante über Läufe.
ich in der Lage möchte eine Methode mit dieser Signatur zu implementieren (müssen es manchmal in einer Schleife aufgerufen werden):
bool Event.WasProcessed(DateTime AsOf)
Ich brauche zu einem bestimmten Zeitpunkt in der Lage sein zu fragen, denn die Geben Sie an, ob das Ereignis stattgefunden hat (verarbeitet oder nicht). Also müsste ich herausfinden, ob das angegebene Datum in irgendein eines der Datumsbereiche (die sich überschneiden können) oder nicht.
Ich bin nicht einmal sicher, ob diese Abfrage in SQL oder Code ausgeführt werden soll. Die Abfrage muss manchmal auf einer beliebigen Reihe von Ereignissen ausgeführt werden (von denen jedes von einem Objekt repräsentiert wird, das das Ereignis und eine Liste von Verarbeitungen enthält), also könnte das Ausführen der Operation in SQL bedeuten, dass die DB ziemlich oft getroffen wird. Auf der anderen Seite ist SQL bei Abfragen im Allgemeinen schneller. Auf der anderen Seite zeigt this similar issue, dass eine cursorbasierte Lösung sowieso benötigt würde.
Alle Zeiger würden geschätzt, auch wenn sie nur bessere Suchzeichenfolgen sind. (Jede daterange Ausgabe Googeln scheint etwas Geschick mit, dass erfordert.)
Welche Programmiersprache? Du hast es nicht gesagt. – scragar
Ich benutze C#, aber ich denke, ich kann eine Antwort aus anderen Sprachen übersetzen. –
Könnten Sie bitte ein kleines Beispiel Ihrer Datenbank geben und was würden Sie gerne abfragen? – Quassnoi