これは小さなスケジューリングアプリ用です。2つの「スケジュール」を効率的に比較し、違いを見つけ、変更されたデータ行と、このテーブルを外部キーとして持つ別のテーブルのエントリのみを更新するアルゴリズムが必要です。これは大きな質問なので、すぐに一般的なアドバイスまたは具体的な解決策を探していると言います。
編集:提案されたように、私は質問を大幅に短縮しました。
1つの表では、リソースが使用される期間にリソースを関連付けています。
また、テーブルAのIDを外部キーとして使用する2番目のテーブル(テーブルB)もあります。
表Bに対応する表Aのエントリには、表Bの期間を含む期間があります。表Aのすべてのエントリに表Bのエントリがあるわけではありません。
ユーザーがテーブルAのリソーススケジュールを編集するためのインターフェイスを提供しています。これらは基本的に、DB内のバージョンとの差分として扱う必要があるテーブルAの新しいデータセットを提供します。
テーブルBが指すオブジェクトをテーブルAから完全に削除する場合は、テーブルBからもエントリを削除します。
したがって、次の3つのセットが与えられます。
- 表Aの元のオブジェクト(DBから)
- 表Bの元のオブジェクト(DBから)
- 表Aから編集されたオブジェクトのセット(ユーザーからのものであるため、一意のIDはありません)
次のようなアルゴリズムが必要です。
- これらのオブジェクトに変更が必要ない場合は、表Aと表Bの行を変更しないでください。
- 必要に応じて、テーブルAに行を追加します。
- 必要に応じて、テーブルAとテーブルBから行を削除します。
- 必要に応じて、テーブルAとテーブルBの行を変更します。
適切なデータベース操作を適用できる配置にオブジェクトを並べ替えるだけで、ソリューションには十分すぎるほどです。
繰り返しになりますが、具体的または一般的に好きなように答えてください。アドバイスを探していますが、誰かが私の一日を作る完全なアルゴリズムを持っている場合。:)
編集: lassvekに応えて、私はいくつかの追加の詳細を提供しています:
テーブルBのアイテムは、単に重複するのではなく、常にテーブルAのアイテム内に完全に含まれます。
重要なのは、表Bの項目は量子化されているため、完全に内側または完全に外側に収まる必要があるということです。これが発生しない場合は、データ整合性エラーが発生しているため、個別に処理する必要があります。
例(省略形を使用する場合):
表A IDリソース開始終了 01リソースA10/67:00 AM 10/6 11:00 AM 02リソースA10/61:00 PM 10/6 3:00 PM 表B IDTable_A_ID開始終了 01 02 10/6 1:00 PM 10/6 2:00 PM
したがって、次の動作が必要です。
- テーブルAからID02を削除するか、午後2時から午後3時に短縮する場合は、テーブルBからID01を削除する必要があります。
- テーブルAID01を午後1時に終了するところまで拡張すると、これら2つのエントリが1つの行にマージされ、テーブルBID01がテーブルAID01を指すようになります。
- 表AID01から8:00AM-10:00AMを削除した場合、そのエントリは2つのエントリに分割する必要があります。1つは7:00 AM-8:00AM用で、新しいエントリ(ID 03)は10:00AM-11用です。午前00時。