次の構造のテーブルがあります。
event
- id
- date_start
- number_hours
- date_end
- specialist_id / specialist assigned to this event.
ユーザーは、イベントの開始日と継続時間数を選択します。現在、これらのイベントはすべて非定期的ですが、定期的なイベントの可能性を追加したいと考えています。
どうすれば適切に設計された方法でこれを行うことができますか? このデザインを拡張して、毎週および毎月のイベントだけでなく、毎週日曜日、土曜日、またはその他の定期的なイベントもサポートできるようにしたいと考えています...ありがとう
以下のことを考えていました
イベント
- id
- date_start
- recurring / whether the event is recurring or not
- weekly / (if repeats every 1 week, this will be 1, if repeats every 2 weeks, this number will be 2)
- monthly / (if repeats every 1 month, this will be 1, if repeats every 2 months, this number will be 2)
- last_occurred_date / date the event last occurred (if non-recurring, this equals date_start, if recurring, it does not)
- next_occurred_date / date when the event is supposed to occur next.
- specialist_id / what specialist took this event
したがって、ユーザーが 2012 年 10 月 1 日に毎月繰り返されるイベントを追加すると、次のエントリがテーブルに追加されます。
date_start: 10/1/2012, recurring: 1, weekly: 0, monthly: 1 (it occurs every 1 month), last_occurred_Date: 10/1/2012, next_occurred_date: 11/1/2012)
そして、基本的にすべての定期的なイベントを通過する cron ジョブがあります (ここで、event.recurring = 1 で、新しいイベントが発生するためにイベント テーブルにエントリを追加します)。
したがって、イベントの次の日付は 2012 年 11 月 1 日です。次のエントリが追加されます。
id: 1 date_start: 11/1/2012 recurring: 0
定期的なイベントが行われる日付ごとにエントリを追加する理由は、各イベントにスペシャリストを割り当てる必要があるためです。そのため、スペシャリストは、各イベントにサインアップできるリンクが記載されたメールを受け取ります。