powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь таблицы с собой
17 сообщений из 17, страница 1 из 1
Связь таблицы с собой
    #39824684
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть таблица со столбцом "UserID", куда пишется уникальный идентификатор пользователя.
Каждый UserID может дружить с несколькими другими UserID.
Как наиболее правильно реализовать запись данных об этой дружбе, если учесть, что все UserID находятся в одной таблице в одном столбце?
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824718
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tempreg00Как наиболее правильно реализовать запись данных об этой дружбе, если учесть, что все UserID находятся в одной таблице в одном столбце?Сделать таблицу с 2мя полями (Кто, СКем)
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824779
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgtempreg00Как наиболее правильно реализовать запись данных об этой дружбе, если учесть, что все UserID находятся в одной таблице в одном столбце?Сделать таблицу с 2мя полями (Кто, СКем)
Сначала надоть решить: коммутативно ли отношение дружения?
Т.е. если А дружит с Б следует ли из этого, что Б дружит с А?
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824789
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222alexeyvgпропущено...
Сделать таблицу с 2мя полями (Кто, СКем)
Сначала надоть решить: коммутативно ли отношение дружения?
Т.е. если А дружит с Б следует ли из этого, что Б дружит с А?Безответной дружбы не бывает!
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824800
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg, благодарю. Логически тоже пришёл к этому. Ещё пытался установить связи и первого и второго столбца (Кто, СКем) с UserID первой таблицы, но SQL запрещает добавить вторую связь к одному столбцу. Значит, вообще без связей использовать?
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824803
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, да, они дружат полноценно и в обе стороны) хотя, с точки зрения организации БД, вопрос действительно немного сложнее, чем кажется.
Думаю, используя способ сохранения alexeyvg, для получения списка друзей предполагается получать все значения столбца "СКем", при определённом столбце "Кто".
В таком случае понимаю, что будет дублирование данных при сохранении списка дружбы того, кто уже попал ранее в список в столбец "СКем".
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824822
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tempreg00Ещё пытался установить связи и первого и второго столбца (Кто, СКем) с UserID первой таблицы, но SQL запрещает добавить вторую связь к одному столбцу. Значит, вообще без связей использовать?Во первых, ничего он не запрещает, но это просто не нужно.

Во вторых, вам нужно установить 2 связи: "Кто с UserID" и "СКем с UserID"
aleks222alexeyvgпропущено...
Сделать таблицу с 2мя полями (Кто, СКем)
Сначала надоть решить: коммутативно ли отношение дружения?
Т.е. если А дружит с Б следует ли из этого, что Б дружит с А?Да в общем схема от этого не меняется.
Разве что, если отношение коммутативно, то нужно запретить лишние пары типа (1,2) и (2,1)
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824826
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tempreg00В таком случае понимаю, что будет дублирование данных при сохранении списка дружбы того, кто уже попал ранее в список в столбец "СКем".Да, поэтому, что бы не было дублирования, нужно запретить дублирование. :-)
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824862
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgДа, поэтому, что бы не было дублирования, нужно запретить дублирование. :-)

Вероятно тут мне нужна уже практическая помощь. Для второй таблицы создан парный ключ (Кто, СКем), дублирование 1,2 он запрещает, но дублирование 2,1 нет. Не нахожу настройку, отвечающую за такой запрет, где это настраивается?
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824897
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tempreg00,

через ограничения никак.

Это можно сделать при помощи триггеров, срабатывающих при попытке вставки или апдейта.
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824899
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо разрешить строку 1-2 и запретить строки 2-1?
Код: sql
1.
CHECK(Кто < СКем)
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824901
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в упор не понимаю желания остаться в рамках одной таблицы. При том, что соотношение имеет тип M:N.

Сделайте две таблицы. Первая - собственно юзеры, вторая - дружбы.

А чтобы не хранить дубли, на таблицу дружбы наложите констрейнт "ID кто" < "ID с кем" и создайте "переворачивающий" триггер на случай, если кто-то попытается ввести наоборот. И вьюшку, которая создаёт полный список дружб тупым UNION.

Или наоборот, храните дубли - и тогда создайте триггер, который по любому действию выполняет такое же действие с "обратной" парой.
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824911
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tempreg00Как наиболее правильно реализовать запись данных об этой дружбе, если учесть, что все UserID находятся в одной таблице в одном столбце?В качестве альтернативы можно рассмотреть - https://docs.microsoft.com/ru-ru/sql/relational-databases/graphs/sql-graph-architecture?view=sql-server-2017
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39824916
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А втроём и более дружить могут?
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39825025
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Нет необходимости оставаться в одной таблице. Уже создана вторая. Актуальный вопрос был как ликвидировать хранение лишних пар.
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39825027
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

В рамках данной задачи нет))
...
Рейтинг: 0 / 0
Связь таблицы с собой
    #39825028
tempreg00
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за информативность и скорость ответов.
Сделал двумя таблицами, то, что нужно работает.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь таблицы с собой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]