2013-07-22 69 views
0

我正在建立射箭錦標賽射擊的數據庫。 其中一個表格包含志願者工作的工作班次。什麼是正確的方式來處理將成爲獨特的非獨特的行

目前,它看起來像這樣:

+-------+---------+--------+---------+-------+-----+ 
| JobID | ShiftID | UserID | EventID | Hours | Day | 
+-------+---------+--------+---------+-------+-----+ 
| 10 |  9 | 1125 |  6 | NULL | 1 | 
| 11 |  9 |  0 |  6 | NULL | 1 | 
+-------+---------+--------+---------+-------+-----+ 

作業ID鏈接到工作即登記,廚房。

ShiftID鏈接到輪班的小時數,即7-9(小時在應變事件所有者的請求下,因爲輪班可能會持續很長時間)。

用戶名鏈接到志願者......

事件ID鏈接到特定事件。

一天是活動的日子,適用於多天的活動。

爲條目填充事件,然後添加用戶。 這當前允許在連接列(JobID,ShiftID,UserID,EventID)上放置一個唯一約束。

但是,活動所有者現在希望能夠同時在一個活動中進行多次輪班。在用戶註冊後,條目將是唯一的。

什麼是正確的方法來處理這個問題? 這些是我想到的解決方案,但他們都沒有感覺是正確的:

  1. 做出新的轉變。
  2. 創造一份新工作。
  3. 爲掛起的工作班次製作新表格。
  4. 刪除表上的唯一約束。
  5. 添加另一列來處理重複的班次。

回答

1

您的顧慮是與約束。

將多個班次擬合到當前模式中的一種方法是「發明」佔位者用戶。如果您只需要同時支持兩個班次,則可以將user設置爲NULL,並且約束條件良好。對於兩次以上的班次,創建新的用戶標識符(可能帶有負號標識符以便它們很明顯),這實際上意味着「沒有用戶進行此類轉換」。

+0

我喜歡這個想法。 這是一個常見問題,還是我做了一件奇怪的事情來遇到這個問題? – IGYCRCTL

相關問題