私はFirebird2.1を使用しており、この問題を解決するための最良の方法を探しています。
予定表アプリケーションを書いています。さまざまなユーザーのカレンダーエントリが大きなカレンダーテーブルに保存されます。各カレンダーエントリには、リマインダーセットを設定できます。リマインダー/エントリは1つだけです。
統計的には、カレンダーテーブルは時間の経過とともに数十万のレコードに成長する可能性がありますが、リマインダーははるかに少なくなります。
定期的にリマインダーを照会する必要があります。
どちらが最良の選択肢ですか?
A)リマインダーの情報をカレンダーテーブルに保存します(この場合、IsReminder = 1について数十万のレコードをクエリします)
B)リマインダーが設定されているカレンダーエントリのIDのみを含む別のリマインダーテーブルを作成し、JOIN操作で2つのテーブルにクエリを実行します(またはそれらのビューを作成します)
C)リマインダーに関するすべての情報をリマインダーテーブルに保存してから、このテーブルのみをクエリできます。欠点は、リマインダーを表示するために、イベントの開始時刻を知ってリマインダーテーブルに保存する必要があるなど、一部の情報を両方のテーブルに複製する必要があることです。したがって、同じ値を持つ2つのテーブルを維持しています。
どう思いますか?
そしてもう1つの質問:Calendarテーブルには、UserIDフィールドのみで区切られた複数のユーザーのカレンダーが含まれます。ユーザーは4〜5人しかないため、このフィールドにインデックスを付けても、その選択性は非常に悪くなります。これは、数十万のレコードがあるテーブルには適していません。ここに回避策はありますか?
ありがとう!