如何在postgres中强制实现单向唯一性?

时间:2018-02-23 07:44:31

标签: sql postgresql database-design one-to-many

假设我有一个job_assignment表,其中包含worker_idjob_id表中的workerjob

工人可以有很多工作但是工作只能分配给一个工人。有没有办法在postgres中确保这一点?

如果我放UNIQUE(worker_id, job_id),这只是一对一的映射。我已经阅读了UNIQUE FOREIGN KEY,但我仍然不确定这是否是正确的方法。

2 个答案:

答案 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,因此最多只分配给一名工作人员。