2010-12-07 3 views
2

У меня есть таблица, какВозможно ли иметь уникальную по группе строк вместо всей таблицы?

 
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

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

+0

Я думаю, что лучший дизайн, как вы сказали, установите его в другой таблице. – Danosaure 2010-12-07 09:03:32

+0

да! я собираюсь сделать другую таблицу :) спасибо – everplays 2010-12-07 09:17:02

ответ

1

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

3

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

+0

, но у меня много строк с id = 1 & president = 0, если я делаю «UNIQUE KEY» grouped_executions_id_president` (`id`,` president`) «я не могу em – everplays 2010-12-07 08:40:50

-1

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

ALTER TABLE grouped_executions ADD CONSTRAINT PRIMARY KEY (id, president); 
Смежные вопросы