我正在使用MySQL,我有三个表,一个任务表,一个产品表和一个描述两者之间关系的表:每个产品由几个任务组成,每个任务可以在多个任务中找到产品
描述两者之间关系的表有两个主键,ProductID和TaskID也都是外键。在这个表中,我有一个名为TaskOrder的字段,对于给定的Product,它列出了必须执行任务的顺序。
我想要的是,对于任何产品,您不能使用相同的TaskOrder进行两项任务,但是我不能将TaskOrder设置为唯一,因为不同的产品将(并且应该)具有TaskOrder的重复值
有没有办法做到这一点?
答案 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不需要只是一个字段。