0

我正在为射箭比赛拍摄建立一个数据库。其中一张桌子为工作的志愿者提供轮班工作。

它目前看起来像这样:

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

JobID 链接到工作,即注册、厨房。

ShiftID 链接到轮班时间,即 7-9 小时(应事件所有者的请求,因为轮班时间可能会很长,所以小时数在那里)。

UserID 链接到志愿者...

EventID 链接到特定事件。

对于跨越多天的事件,Day 是事件的日期。

为事件填充条目,然后添加用户。这目前允许在连接列(JobID、ShiftID、UserID、EventID)上放置唯一约束。

但是,活动所有者现在希望能够在一个活动中同时进行多个轮班。用户注册后,条目将是唯一的。

处理这个问题的正确方法是什么?这些是我想到的解决方案,但没有一个是正确的:

  1. 做出新的转变。
  2. 做一份新工作。
  3. 为待定的工作班次制作一个新表。
  4. 删除表上的唯一约束。
  5. 添加另一列来处理重复的班次。
4

1 回答 1

1

你关心的是约束。

将多个转变拟合到当前模式的一种方法是“发明”占位符用户。如果您只需要同时支持两个班次,您可以将 设置user为 NULL 并且约束是可以的。对于两个以上的班次,创建新的用户 ID——可能带有负 ID,所以它们很明显——这实际上意味着“还没有用户参与这个班次”。

于 2013-07-22T02:01:37.693 回答