Представьте, что вы живете в очень упрощенном примере - и представьте, что в вашей базе данных MySQL есть таблица людей:
create table person (
person_id int,
name text
)
select * from person;
+-------------------------------+
| person_id | name |
+-------------------------------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+-------------------------------+
, и эти люди должны сотрудничать / работать вместе, поэтому вы 'у нас есть таблица ссылок, которая связывает одну запись человека с другой:
create table person__person (
person__person_id int,
person_id int,
other_person_id int
)
Эта настройка означает, что ссылки между людьми являются однонаправленными - то есть Алиса может связываться с Бобом, без Боба, связывающегося с Алисой, и, что еще хужеАлиса может связываться с Бобом и Боб может связываться с Алисой одновременно в двух отдельных записях ссылки.Поскольку эти ссылки представляют рабочие отношения, в реальном мире все они являются двусторонними взаимоотношениями.В этой настройке возможно следующее:
select * from person__person;
+---------------------+-----------+--------------------+
| person__person_id | person_id | other_person_id |
+---------------------+-----------+--------------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
| 4 | 3 | 1 |
+---------------------+-----------+--------------------+
Например, с person__person_id = 4 выше, при просмотре профиля Кэрол (person_id = 3) вы должны увидеть связь с Алисой (person_id = 1)и когда вы просматриваете профиль Алисы, вы должны увидеть отношения с Кэрол, даже если ссылка идет по другому пути.
Я понимаю, что могу выполнять объединение и отдельные запросы, и вообще, чтобы представить отношения как взаимные вUI, но есть ли лучший способ?У меня такое ощущение, что - это лучший способ, когда эта проблема будет аккуратно растаяла при правильной настройке базы данных, но я ее не вижу.У кого-нибудь есть идея получше?