假设我有一个job_assignment
表,其中包含worker_id
和job_id
表中的worker
和job
。
工人可以有很多工作但是工作只能分配给一个工人。有没有办法在postgres中确保这一点?
如果我放UNIQUE(worker_id, job_id)
,这只是一对一的映射。我已经阅读了UNIQUE FOREIGN KEY
,但我仍然不确定这是否是正确的方法。
答案 0 :(得分:1)
这不应该使用中间job_assignment
表建模 - 这将是建立多对多关系的正确方法。
相反,您应该将外键列worker_id
添加到job
。这样就保证了一份工作只能属于一个工人。
如果您要在job_assignment
中存储字段,则可以将job_assignment_id
外键添加到job
,将worker_id
外键添加到job_assignment
}}。但我要说你也可以将这些数据添加到job
。创建一个反映现实的数据模型很好,但是你的模型也应该允许你的SQL查询很简单,没有必要的连接。
答案 1 :(得分:0)
我不会为此使用中间表,但您可以通过向UNIQUE(job_id)
添加job_assignment
约束来执行您要求的操作。
这确保job
中最多只列出一次job_assignment
,因此最多只分配给一名工作人员。