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

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

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

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

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

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

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

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

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


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