Почему этот составной первичный ключ не работает должным образом? - PullRequest
1 голос
/ 27 февраля 2011

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

Он состоит из идентификатора проекта и идентификатора пользователя

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

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

project_id | 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 ]

0 голосов
/ 27 февраля 2011

Я думаю, у вас должно быть:

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

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

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

0 голосов
/ 27 февраля 2011

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

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

...