我正在为射箭锦标赛拍摄建立一个数据库。 其中一个表格保留了志愿者工作的工作班次。
目前看起来像这样:
+-------+---------+--------+---------+-------+-----+
| JobID | ShiftID | UserID | EventID | Hours | Day |
+-------+---------+--------+---------+-------+-----+
| 10 | 9 | 1125 | 6 | NULL | 1 |
| 11 | 9 | 0 | 6 | NULL | 1 |
+-------+---------+--------+---------+-------+-----+
JobID链接到工作,即注册,厨房。
ShiftID链接到班次的小时数,即7-9(事件所有者请求的小时数,因为班次可能会很长)。
UserID链接到志愿者......
EventID链接到特定事件。
日期是事件的一天,对于跨越多天的事件。
为事件填充条目,然后添加用户。 这当前允许在连接列(JobID,ShiftID,UserID,EventID)上放置唯一约束。
但是,事件所有者现在希望能够同时在一个事件中进行多次轮班。用户注册后,条目将是唯一的。
处理这个问题的正确方法是什么? 这些是我想到的解决方案,但没有一个感觉正确:
答案 0 :(得分:1)
您关心的是约束。
将多个班次拟合到当前模式的一种方法是“发明”占位符用户。如果您只需要同时支持两个班次,则可以将user
设置为NULL并且约束正常。对于两个以上的班次,创建新的用户ID - 可能带有负ID,因此它们很明显 - 这实际上意味着“此时尚无用户”。