Персоны ссылаются друг на друга, как лучше хранить это в базе?

Персоны ссылаются друг на друга, как лучше хранить это в базе?

Если сделать поля "person_1" и "person_2", то при поиске связей, придется искать по обоим, т.к. оба значения могут быть как в одном поле, так и во втором.

Например:
P1 - P2
P3 - P1
P2 - P3
Надо отобрать связи персоны P1, но в первой записи P1 в первом поле, во второй - во втором.
Надо отобрать связи персоны P2, первой записи P2 во втором поле, в третьей - в первом.

Или делать избыточный вариант и сохранять
P1 - P2
P2 - P1
P3 - P1
P1 - P3
P2 - P3
P3 - P2
?
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А в чём проблема?
SELECT `person_1`
  FROM `table`
  WHERE `person_2` = :id
UNION SELECT `person_2`
  FROM `table`
  WHERE `person_1` = :id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Я могу посоветовать такой вариант для поиска контактов :
select 
	:id as person,
	IF (person_1 = :id, person_2, person_1) person_contact
from persons
where person_1 = :id or person_2 = :id
;


Не забудьте добавить составной индекс на обоих полях, тогда выборка будет использовать его.

прверить SQL запрос
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы