возможно ли иметь уникальную группу строк вместо всей таблицы? - PullRequest
2 голосов
/ 07 декабря 2010

у меня есть стол как

CREATE TABLE IF NOT EXISTS grouped_executions (
    id             INTEGER UNSIGNET NOT NULL ,
    execution_id   INTEGER UNSIGNED NOT NULL REFERENCES execution.execution_id ,
    president      BOOLEAN NOT NULL DEFAULT 0

    PRIMARY KEY ( id, execution_id )
) ENGINE = InnoDB ;

Все, что я хочу, это сделать президента уникальным в группе строк с одинаковым идентификатором.

например: у меня есть такие данные:

id | execution_id | president
= - = - = - = - = - = - = - =
1  | 1            | 0
1  | 2            | 1
1  | 3            | 0
1  | 4            | 0
я хочу, чтобы mysql не вставлял новую строку с идентификатором = 1 и президентом = 1

(конечно, я могу сделать еще один стол, который будет президентом группы, но возможна ли структура выше?)

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Да, вы можете добавить уникальное ограничение для комбинации двух столбцов.

1 голос
/ 07 декабря 2010

Вы можете попытаться установить значение NULL по умолчанию для president, поскольку уникальный ключ допускает множественные значения NULL, но в этом случае бессмысленно иметь bool только с одним 1 и многими NULL с, но нет 0. Если вы не хотите устанавливать другие механизмы, такие как триггеры (предложенные @David Hedlund), вам лучше использовать другую таблицу для этих отношений (как вы упомянули). Таким образом, если вам когда-нибудь понадобится уникальный «секретарь» или «казначейство», было бы легко определить новую таблицу вместо того, чтобы этот триггер (или другой) проверял эту связь.

0 голосов
/ 07 декабря 2010

Вы пробовали это?

ALTER TABLE grouped_executions ADD CONSTRAINT PRIMARY KEY (id, president);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...