#mysql #key #constraints #unique
#mysql #Клавиша #ограничения #уникальный
Вопрос:
У меня есть таблица, которая содержит столбцы:
employer_id
contact_id
primary
Первые два — это целые числа, последнее — это крошечное число, равное либо 1/0. Работодатель может быть присоединен к нескольким контактам и наоборот. Однако я хочу обеспечить соблюдение того, что может быть только один экземпляр, где primary = 1 для каждого конкретного работодателя. Их может быть много, где primary = 0.
Есть ли какой-либо способ сделать это с помощью ограничений / ключей в MySQL?
Спасибо
Ответ №1:
Не с помощью ключей, но вы можете установить триггер вставки / обновления, чтобы проверить это (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
.
Комментарии:
1. Хорошо, я знаю, что могу сделать это с помощью триггера … просто надеялся избежать этого. Пока оставляем открытым на случай, если у кого-то есть какое-нибудь невероятно умное решение. Если нет, я просто приму свою судьбу … и ваш ответ. Спасибо.
Ответ №2:
У меня был похожий случай несколько дней назад, и то, что я сделал, это добавил еще один столбец «created_at», таким образом, я могу получить «первичный» (последний вставленный и с primary = 1);