2010-03-23 3 views
8

У меня есть две таблицы -> Переменные (id, name) и Variable_Entries (id, var_id, value).MySQL: уникальное ограничение на несколько полей

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

Есть ли способ сделать столбец значений уникальным для одинаковых параметров var_id?

ответ

9

Да:

alter table Variable_Entries add unique (var_id, value); 

Теперь у вас есть ограничение уникальности через var_id и значения вместе. Другими словами, появление var_id и значения не может появляться более одного раза.

+0

спасибо, а также людям ниже ... Я не мог найти это где-нибудь – Cypher

+0

Есть ли способ обеспечить это при создании таблицы? – puk

+2

вы не можете желать знать, но ради других, 'создать таблицу tbl_table ( \t идентификатор целое не равно нулю auto_increment, \t Fname VARCHAR (255), LNAME VARCHAR (255), \t CONSTRAINT tbl_table ОСНОВНОЙ KEY (id), \t unique (fname, lname) ) ' –

0

Добавить уникальный ключ Variable_Entries для комбинированных полей var_id/value.

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

+0

Интересно, почему мы должны всегда использовать особые имена для имен таблиц? –

+0

«Вы всегда должны использовать единственные слова для имен таблиц» - я не согласен. Я всегда использую множественное число, и я знаю, что я не одинок (ActiveRecord, например, делает то же самое). –

+0

CakePHP зависит от множественного числа для имен таблиц ... Это смешной комментарий :) Верхний регистр, хотя ... Я согласен – luigi7up

6

Да, вы можете создать композитный unique key:

ALTER TABLE variable_entries ADD UNIQUE (var_id, value); 
+0

Спасибо за слово * composite *, заставило меня понять, что он делает. –

Смежные вопросы