Как решить проблему с двумя внешними ключами?

Есть таблица с элементами вида:
elements
-------------------------------
 `element_id `  | `someData`
-------------------------------
       1        |   blabla
 ------------------------------
       2        |  blablaAgain
-------------------------------

Есть таблица, выражающая отношения между элементами (если таковые отношения имеются)
relations
------------------------------------------------
 `element_1_id` |  `element_2_id` |  `relation`


По задумке, оба элемента (element_1_id и element_2_id) должны быть привязаны по внешнему ключу к полю `elements.element_id`

Но "мускулистый парень" сказал, что так делать совсем нельзя (вязать два поля по внешнему ключу на одну таблицу).

Как быть? Спасибо.
  • Вопрос задан
  • 2423 просмотра
Пригласить эксперта
Ответы на вопрос 2
@koigva
Вспомогательная таблица нужна для реализации связи ManyToMany. Если связь OneToMany можно обойтись добавлением поля типа parent_id в существующую таблицу.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Я так понимаю, это и есть M:M. Поле relation имеет отношение к самой связи, какие-то дополнительные данные.
Два ключа и вешаете:
ALTER TABLE `relations`
  ADD CONSTRAINT `relations_id1_fk` FOREIGN KEY ( `element_1_id`) REFERENCES `elements` (`element_id`),
  ADD CONSTRAINT `relations_id2_fk` FOREIGN KEY ( `element_1_id`) REFERENCES `elements` (`element_id`);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы