Почему этот составной первичный ключ не работает должным образом?

У меня есть таблица "tbl_project_user_assignment" с составным первичным ключом.

Это составлено из project_id и user_id

Каждый из них также является внешним ключом для таблицы проекта и пользователя соответственно.

На данный момент у меня есть 2 записи в этой таблице, как показано ниже...

идентификатор_проекта | user_id
--------------------
1          | 1
1          | 2

Когда я запускаю этот SQL-запрос...

INSERT INTO tbl_project_user_assignment (project_id, user_id) VALUES (2, 1);

... я получаю следующее сообщение об ошибке:

Нарушение ограничения целостности: 1062 Повторяющаяся запись '1' для ключа 'FK_project_user'

Ключ FK_project_user - это ключ, связывающий идентификатор_проекта с идентификатором tbl_project.

Это не имеет смысла для меня, потому что значения, которые я вставляю, уникальны...

Есть идеи?

2 ответа

Решение

Это выглядит как FK_project_user это уникальный ключ. Попробуйте временно удалить это ограничение и снова выполнить вставку.

Если вставка работает, заново создайте ограничение, убедившись, что оно не помечено как unique больше.

Я думаю, что вы должны иметь:

  • отношение внешнего ключа к проекту
  • отношение внешнего ключа к пользователю
  • уникальное ограничение (проект, пользователь)
  • возможно, первичный ключ для комбинации (проект, пользователь) ИЛИ отдельное поле ключа. Если вы выберете комбинированный PK, вам, конечно, не понадобятся дополнительные ограничения.

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

Отправка show create table заявление поможет еще больше.

Другие вопросы по тегам