(relationale) Datenbankleistung für ein Datum / einen Zeitpunkt / ein Intervall

Also mache ich ein Projekt in Access SQL und es hat sich gut entwickelt. Ich habe viel über Access und VBA gelernt und diese Seite war dabei hilfreich.

Jetzt stehe ich vor einem Leistungsproblem und da ich wenig Erfahrung mit dieser Art von SQL-Arbeit habe, komme ich hierher, um mir einige Gedanken zu machen.

Ich habe eine relationale Datenbank mit ~ 20 Tabellen für ungefähr 100 Abschnitte, die Teile einer Route darstellen. Die Access-Datenbank ist im Wesentlichen eine Karte, auf der ich mehrere Routen (über Linien) gezeichnet habe, die dynamisch eingefärbt werden können - die Farbe wird durch die spezifische Frage bestimmt und aus der Datenbank berechnet.

Hier ist ein Bild, das es besser erklärt. Sie können im Zugriff nicht auf Linien klicken, daher sind die Schaltflächen in Farbe und Breite mit den Linien identisch und können für weitere Informationen angeklickt werden.

Der Benutzer kann ein Datum auswählen und es wird der Fortschritt der Route gemäß der gestellten Frage angezeigt. Bisher waren diese Fragen immer binär "ja oder nein" (grün oder rot).

Ich habe festgestellt, dass ich aufgrund der Komplexität der Abfragen beim Start eine temporäre Datenbank für jede Abfrage vorbereiten muss, da es sonst nicht möglich ist, reibungslos durch Daten zu scrollen.

Hier ist also mein spezielles Problem:

Jeder Streckenabschnitt kann sich zu einem bestimmten Zeitpunkt in verschiedenen Phasen (Think Construction) befinden. Von "Phase 0" zu "erledigt"

Es soll eine neue Linie implementiert werden, die Phasen eines Projekts darstellt. Es gibt ungefähr 8 mögliche Phasen für alle Abschnitte, die zu unterschiedlichen Zeiten und - hier ist die Sache - in einer unterschiedlichen Reihenfolge für jeden Abschnitt auftreten können UND nicht alle Phasen in allen Abschnitten auftreten.

Was ich in der Datenbank habe, sind nur Startdaten - keine Enddaten - für jede Phase. Die Reihenfolge der Phasen hängt im Wesentlichen von der Reihenfolge des Startdatums ab. Zumindest kann jede Phase für jeden Abschnitt nur einmal vorkommen, also gibt es das. Wie Sie sehen, ist dies eine beschissene Sache für diese Art von leistungsorientiertem Programm.

Ich bin sicher, dass es sich um eine oder mehrere temporäre Datenbanken handelt. Meine Ideen:

Aggregieren Sie alle Daten in einer Zeile einer neuen Tabelle. Da die Anzahl der Phasen festgelegt ist, gibt es Spalten für jede Phase - falls erforderlich, wann sie beginnt und wann sie endet. Es muss nun jeweils eine Schleife durchlaufen werden, um zu prüfen, ob das Benutzerdatum in welche Phase fällt. Also: "SectionID - phase1needed phase1start phase1end ....."
Vorteil:

Man kann die Daten manuell bestätigen und in Sekundärformen gut anzeigenEs hält die Datenbank klein
Nachteil:Die eigentliche Schleife muss (im schlimmsten Fall) alle Phasen durchlaufen, um die richtige zu finden.

Berechnen Sie eine neue Datenbank, die nur "IdSection - Date - Phase" ist, und berechnen Sie eine Phase für jeden Abschnitt und JEDEN Tag in einem Intervall.
Vorteil:

Dadurch werden die Laufzeitberechnungen auf eine Abfrage pro Abschnitt beschränktDer Zugriff sollte mit großen Datenmengen funktionieren
Nachteil:Ich kann nicht manuell überprüfen, ob das, was ich getan habe, für alle Abschnitte korrekt warWird beim Start lange dauern, wie wirklich langeIn dieser Datenbank sind viele Einträge erforderlich

Jetzt frage ich was du bevorzugen würdest, oder ob es überhaupt eine andere Methode gibt? Ich kann nicht wirklich viel an den Datenpunkten ändern, die ich habe.

Kurz gesagt, ich muss Zeitintervalle verschiedener Phasen anzeigen und in der Datenbank habe ich nur Startzeitpunkte, keine vollständige Reihenfolge der Phasen.

Vielen Dank für Ihre Gedanken, alle Erfahrungen in dieser Art von Dingen werden helfen

Antworten auf die Frage(1)

Ihre Antwort auf die Frage