В SQL, как я могу иметь два поля, которые не могут быть одинаковыми, только одно является первичным ключом - PullRequest
1 голос
/ 31 января 2009

Я использую MySQL, и у меня есть три таблицы, таблица задач, таблица продуктов и таблица, которая описывает соотношение между ними: каждый продукт состоит из нескольких задач, и каждая задача может быть найдена в нескольких продукты.

Таблица, которая описывает отношения между ними, имеет два первичных ключа, ProductID и TaskID, которые также являются внешними ключами. В этой таблице у меня есть поле с именем TaskOrder, в котором для данного Продукта указывается порядок выполнения задач.

Я хочу сказать, что для любого продукта у вас не может быть двух задач с одним и тем же TaskOrder, однако я не могу просто установить для TaskOrder уникальное значение, потому что разные продукты будут (и должны) иметь дублирующиеся значения для TaskOrder

Есть ли способ сделать это?

Ответы [ 3 ]

5 голосов
/ 31 января 2009

Вы хотите УНИКАЛЬНОЕ ограничение:

create table ProductTasks
 ( ProductID ...
 , TaskId ...
 , TaskOrder ...
 , primary key (ProductId, TaskId)
 , unique (ProductId, TaskOrder)
 );
2 голосов
/ 31 января 2009

Создайте уникальный индекс для комбинации двух полей ProductID и TaskOrder, добавив в команду создания таблицы следующее:

CONSTRAINT UNIQUE (ProductID, TaskOrder)
0 голосов
/ 31 января 2009

Соединительная таблица имеет один первичный ключ, но это многопольный ключ с двумя полями (два FK для других таблиц). ПК не обязательно должен быть только одним полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...