Подтвердить что ты не робот

Уникальный идентификатор или комбинированный идентификатор MySQL

У меня есть следующая структура для моей программы проекта и разработчика:

developer table
id
developer name
etc...

project table
id
project name
etc...

developer _project table
???

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

Если я использую auto increment + user_id + project_id, у меня будет дубликат, так как id является первичным ключом?

4b9b3361

Ответ 1

Используйте уникальный комбинированный ключ:

CREATE TABLE `developer_project` (
 developer_id INT(10) UNSIGNED /* etc... */,
 project_id INT(10) UNSIGNED /* etc... */,
 PRIMARY KEY dev_project (developer_id, project_id)
);

Если вы создаете ID, вы, вероятно, никогда не будете использовать его, так как вы запросите Developer_id и/или project_id в своем LEFT JOIN

ПРИМЕЧАНИЕ. Убедитесь, что определения столбцов совпадают с таблицами developer и project.

Ответ 2

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

Пример (предполагая, что как project_id, так и developer_id являются целыми):

CREATE TABLE `developer_project` (
  `developer_id` INT NOT NULL ,
  `project_id` INT NOT NULL ,
  PRIMARY KEY (  `developer_id` ,  `project_id` )
)

Ответ 3

Комбинированная таблица (в Workbench MySQL автоматически называется "developer_has_project" ) должна использовать объединенный первичный ключ (разработчик, проект). Если вы добавите третий столбец к этому ключу (ID), он больше не должен быть уникальным:

(id,developer,project)
(1,1,1)
(2,1,1)
(3,1,1)

Используя только разработчика и проект, он будет работать:

(developer,project)
(1,1)
(1,1) <-- error!
(2,1)

В качестве альтернативы вы можете использовать ID как единственный первичный ключ и добавить ограничение UNIQUE (разработчик, проект):

(id,developer,project)
(1,1,1)
(2,1,1) <-- error
(3,2,1)

Ответ 4

Или:

developer_project table
developer_id
project_id
PRIMARY KEY (developer_id, project_id)

или

developer_project table
id
developer_id
project_id
PRIMARY KEY (id)
UNIQUE KEY (developer_id, project_id)

Я предлагаю вам использовать первый вариант, если у вас нет причин. Существуют ORM, которые не хорошо справляются с составными (первичными) ключами.