Как связать между собой 2 записи одной таблицы?

Привет.

Я считал, что я неплохо разбираюсь в теории баз данных, но одну вещь придумать не могу. может переработал я.
В чем суть. Есть некая таблица клиентов. Вопрос: Как по парно связать между собой 2-х клиентов.
Решения которые пришли в голову.
1. Создать таблицу связей. table(client_1, client2) и создать уникальный индекс по двум полям, но при этом таблица не запрещает добавлять 2 записи (client_1, client2) и (client_2, client_1), т.е. получается для одной связи 2 строки добавилось у меня. Получается, что целостность БД мне приходится поддерживать на уровне приложения. Как сделать, чтоб нельзя было вторую запись добавлять?

2(друг посоветовал). Создать виртуальные контейнера. Для каждой парной связи создать свой контейнер и добавлять в этот контейнер обоих клиентов. Это в некотором случает решает предыдущую проблему, но появляется другая, как сделать, чтобы в этот контейнер случайно не добавили третьего клиента, т.к. мне нужно только 2-их связать. Получается, что здесь тоже нужно поддерживать целостность БД на уровне приложения.

Как вы решаете такую задачу? Помогите, а то что то в голову ничего не приходит.
  • Вопрос задан
  • 780 просмотров
Пригласить эксперта
Ответы на вопрос 3
@d-stream
Готовые решения - не подаю, но...
А почему смущает (client1, client2) и (client2,client1) ?

К примеру если речь идет о доверенных лицах - то Вася может быть доверенным лицом Пети, а Петя может быть, а может и не быть доверенным у Васи.
Соответственно дальнейшие запросы "кому доверяет Вася" и "у кого в доверенных Вася" - отлично разруливаются, а "кто с кем имеет любые отношения" - разруливается с distinct
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Заведите в таблице поле по значению которого будете объединять записи, пусть это будет поле tag и пусть в этой таблице будет уникальное поле id.
Запрос с объединением примерно такой:
select T1.*, T2.*
from table T1
join table T2 on T2.tag=T1.tag and T2.id <> T1.id
Ответ написан
streetflush
@streetflush
Тут уже все правильно написали @d-stream
Просто дополню идеей избавится от (client_1, client2) и (client_2, client_1)
select T1.*, T2.*
from table T1
join table T2 on T2.id > T1.id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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