2012-10-01 58 views
0

我有以下結構的表:增加經常性活動,非經常性表

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,並將新事件添加到事件表中)

因此,事件的下一個日期是11/1/2012。下面的條目添加:

id: 1 date_start: 11/1/2012 recurring: 0 

爲什麼我添加每個重複事件發生日期條目的原因是因爲我必須指定一個專門給每個事件。所以專家們會收到郵件並附上鍊接,以便他們可以註冊每個活動。

回答

0

我想事件和其他一些參與者和復發2表。 1表保留事件「模板」,另一個是實際的事件實例,可能是第三個用於跟蹤重複事件。

  • event_defaults
    • ID
    • EVENT_NAME
    • event_duration(INT秒)
    • 位置
  • default_participants
    • USER_ID
    • event_defaults_id(foriegn鍵event_defaults.id,從未NULL)
  • event_recurrence
    • foriegn鍵event_defaults(USER_ID和events_default.id之間雙主鍵)。ID
    • recurrence_unit(日,周,月,季度ENUM,年)
    • recurrence_multiplier(INT多少天,周,月復發)
    • 起始日期
    • recur_until
  • 事件
    • EVENT_ID
    • defaults_id(foriegn關鍵event_defaults.id,也許NULL)
    • 名稱
    • START_TIME(時間戳)
    • END_TIME(時間戳)
    • 位置
  • 參與者
    • USER_ID
    • event_id的(foriegn鍵events.id)
    • (雙主user_id和events.id之間的關鍵字)

的想法是你經常性的活動,將創建一個進入event_defaults表和復發信息爲event_recurrence。然後,您將創建一個實例作爲事件中的實際事件。然後用戶可以爲每個事件定義他想要的一些參與者(默認情況下)。將所有一次性事件直接插入事件,並使用foriegn鍵將event_defaults.id設置爲NULL。

當事件再次發生用完了,那麼你就可以刪除event_defaults的條目,並保持記錄,在事件發生的事件。在這麼多天之後,你可以讓這些傢伙修剪掉,將它們歸檔到另一個表格中,或者甚至可以在事件表格上爲已經過期的事件維護一個分區。

好的是通過保持模板和每個事件的實際實例分開,您可以在保持模板不變的同時修改單個事件。因此,舉例來說,周辦公室會議正在本週的一些餐廳進行,而不是辦公室會議室。現在,您只需更新事件中相應事件實例的位置,而無需更改每週模板。

另外,您可以爲每個事件分配一個默認專家,如果他們需要與其他專家出於某種原因切換出來,則只需編輯單個事件實例而不是模板。

此外,您的克朗職位可以創建新的事件,以達到recur_until或.... 10年?無論你決定什麼樣的任意間隔。對於經常性事件創建實例直到時間結束,這並不是一個好主意。