在SQL中,我如何才能有两个不能相同的字段,只有一个是主键

时间:2009-01-31 10:46:37

标签: sql mysql

我正在使用MySQL,我有三个表,一个任务表,一个产品表和一个描述两者之间关系的表:每个产品由几个任务组成,每个任务可以在多个任务中找到产品

描述两者之间关系的表有两个主键,ProductID和TaskID也都是外键。在这个表中,我有一个名为TaskOrder的字段,对于给定的Product,它列出了必须执行任务的顺序。

我想要的是,对于任何产品,您不能使用相同的TaskOrder进行两项任务,但是我不能将TaskOrder设置为唯一,因为不同的产品将(并且应该)具有TaskOrder的重复值

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:5)

你想要一个UNIQUE约束:

create table ProductTasks
 ( ProductID ...
 , TaskId ...
 , TaskOrder ...
 , primary key (ProductId, TaskId)
 , unique (ProductId, TaskOrder)
 );

答案 1 :(得分:2)

通过在表创建命令中添加以下内容,在两个字段ProductID TaskOrder的组合上创建唯一索引:

CONSTRAINT UNIQUE (ProductID, TaskOrder)

答案 2 :(得分:0)

联结表有一个主键,但它是一个包含两个字段的多字段键(其他表的两个FK)。 PK不需要只是一个字段。