ユーザーがスケジュール内の日にアクティビティを追加できるようにするスケジュール作成アプリケーションを開発中です。
見出しデータを保持するスケジュール テーブルがあります。
スケジュール名、スケジュールの日数、ID
アクティビティ ID、スケジュール ID、および日のオフセットを保持するアクティビティ テーブル。
日オフセットは、スケジュールの「n 日目」を参照します。特定の日付を保存する必要はありません。後で誰かのカレンダーにスケジュールが追加されたときに追加されます。
スケジュール内のすべての日に活動があるとは限りません。
質問は - スケジュールから日を削除できるようにしたい (そして、n 日も挿入できるようにしたい)。
削除する場合、ユーザーは編集中のスケジュール内で複数の日を強調表示できます。
したがって、削除を選択すると、アクティビティ テーブルから削除する日付オフセットの配列が得られます。そのビットは些細なことです。
私の問題は、たとえばスケジュールから 5 日目を削除すると、6 日目が新しい 5 日目になります。7 日目、新しい 6 日目などなので、テーブル内の影響を受けるすべてのアクティビティ レコードを更新する必要があります。
これを行う唯一の方法は、削除する日を昇順に並べ替え、次にそれぞれを削除してから、削除されたオフセットよりも大きい dayoffset 値を持つすべてのレコードを検索してデクリメントすることです。次に、削除される日ごとにこのクエリを再実行します。
非常に非効率に感じますが、これ以上のことは考えられません。何か案は?