私は Access SQL でプロジェクトを行っていますが、順調に進んでいます。Access と VBA について多くのことを学びましたが、このサイトはその過程で役に立ちました。
今、私はパフォーマンスの問題に直面しています。この種の SQL 作業の経験がほとんどないため、ここに来て考えてみました。
ルートの一部を表す約 100 のセクションに対して、約 20 のテーブル リレーショナル データベースがあります。Access データベースは基本的に、動的に色付けできる複数のルート (線を介して) を描いた地図です。色は特定の質問によって決定され、データベースから計算されます。
これは、それをよりよく説明する写真です。アクセス中の線をクリックすることはできないため、ボタンは色と幅が線と同じになるように設定されており、クリックすると詳細情報が表示されます。
ユーザーは日付を選択でき、質問に応じてルートの進行状況が表示されます。これまで、これらの質問は常に「はい」または「いいえ」(緑または赤) の二者択一でした。
クエリが複雑なため、起動時にクエリごとに一時データベースをほとんど準備する必要があることがわかりました。そうしないと、日付をスムーズにスクロールできません。
とにかくここに私の特定の問題があります:
ルートの各セクションは、特定の日付で異なるフェーズ (建設を考えてください) にある可能性があります。「フェーズ 0」から「完了」まで
プロジェクトのフェーズを表す新しい行が実装されます。すべてのセクションには約 8 つのフェーズがあり、異なるタイミングで発生する可能性があり、セクションごとに異なる順序で発生する可能性があり、すべてのフェーズがすべてのセクションで発生するわけではありません。
私がデータベースに持っているのは、各フェーズの開始日のみであり、終了日ではありません。フェーズの順序は、開始日の順序によってほぼ決まります。少なくとも各フェーズは各セクションで 1 回しか発生しないため、それはあります。ご覧のとおり、この種のパフォーマンス中心のプログラムにとって、これはくだらないことです。
1 つまたは複数の一時データベースが含まれることは確かです。私のアイデア:
すべての日付を新しいテーブルの 1 行に集約します。フェーズの数が設定されているため、必要に応じてフェーズごとに列があり、いつ開始し、いつ終了します。ループはそれぞれを通過し、ユーザー日付がどのフェーズに該当するかを確認する必要があります。したがって、「SectionID - phase1needed phase1start phase1end .....」
利点:- データを手動で確認し、二次形式で表示することができます
- データベースを小さく保ちます
欠点: - 実際のループは、正しいフェーズを見つけるために (最悪の場合) すべてのフェーズを通過する必要があります。
「IdSection - Date - Phase」だけの新しいデータベースを計算し、間隔内の各セクションと EVERY Day のフェーズを計算します。
アドバンテージ:- これにより、実行時の計算がセクションごとに 1 つのクエリに維持されます
- アクセスは大量のデータで機能する必要があります
欠点: - 私が行ったことがすべてのセクションで正しかったかどうかを手動で確認することはできません
- 本当に長いように、起動時に時間がかかります
- そのデータベースには多くのエントリが必要です
どちらを好むか、または別の方法がある場合でもお尋ねします。私が持っているデータのポイントについては、あまり変更できません。
要するに、さまざまなフェーズの時間間隔を表示する必要があり、データベースには開始時点しかなく、フェーズの完全な順序はありません。
あなたの考えをありがとう、この種の経験は役に立ちます