MySQL уникальность стоимости - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть таблица, содержащая столбцы:

employer_id
contact_id
primary

Первые два - целые числа, последний - tinyint, равный 1/0.Работодатель может быть присоединен к нескольким контактам и наоборот.Тем не менее, я хочу обеспечить, чтобы был только один экземпляр, где основной = 1 для каждого конкретного работодателя.Может быть много, где primary = 0.

Есть ли способ сделать это с помощью ограничений / ключей в MySQL?

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

Не с помощью клавиш, но вы можете установить триггер вставки / обновления, чтобы проверить, что (count(*) where primary=1 and employer_id=?) <= 1.

Редактировать: На самом деле, я думаю, что есть способ: вы создаете вторую таблицу с employer_id в качестве первичного ключа и вторым полем для его основного контакта. Таким образом, у вас есть эти 2 таблицы:

===================================   ================================
|          maintable              |   |       maincontacttable       |
===================================   ================================
|employer_id|contact_id|...data...|   |employer_id|primary_contact_id|
|   PK      |    FK    |          |   |    PK FK  |       FK         |
===================================   ================================

Не более primary столбец. Поскольку employer_id является ключом во второй таблице, вы можете иметь не более одной записи.

Вы получаете первичный контакт через левое внешнее соединение, и он возвращает либо первичный контакт, либо null.

0 голосов
/ 30 апреля 2011

У меня был похожий случай несколько дней назад, и я добавил еще один столбец «create_at», чтобы я мог получить «основной» (последний вставленный и с основным = 1);

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