2009-01-31 65 views
1

我正在使用MySQL,我有三個表,任務表,產品表和產品表兩者之間的關係:每個產品都由多個任務組成,每個任務可以在多個產品中找到。在SQL我怎麼能有兩個字段,不能都是相同的,只有一個是主鍵

描述兩者之間關係的表具有兩個主鍵,ProductID和TaskID,它們都是外鍵。在這個表中,我有一個名爲TaskOrder的字段,對於給定的產品列出了必須執行任務的順序。

我想要說的是,對於任何產品,您不能使用相同的TaskOrder執行兩項任務,但是我不能只將TaskOrder設置爲唯一,因爲不同的產品將會(也應該)具有TaskOrder的重複值

有沒有辦法做到這一點?

回答

5

你想要一個UNIQUE約束:

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

有趣DDL格式化..我真的很喜歡它:) – falstro 2009-01-31 10:59:59

0

聯結表有一個主鍵,但它是一個帶有兩個字段(其他表的兩個FK)的多字段鍵。 PK不需要只有一個字段。

2

創建的兩個字段的組合唯一索引的productid TaskOrder通過添加以下表中創建命令:

CONSTRAINT UNIQUE (ProductID, TaskOrder) 
相關問題