处理将成为唯一的非唯一行的正确方法是什么

时间:2013-07-22 01:47:15

标签: sql

我正在为射箭锦标赛拍摄建立一个数据库。 其中一个表格保留了志愿者工作的工作班次。

目前看起来像这样:

+-------+---------+--------+---------+-------+-----+
| 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)上放置唯一约束。

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

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

  1. 进行新的转变。
  2. 重新开始工作。
  3. 为待定的职位转移制作新表。
  4. 删除表格上的唯一约束。
  5. 添加另一列来处理重复的班次。

1 个答案:

答案 0 :(得分:1)

您关心的是约束。

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