172 похожих чатов

Всем привет! Помогите, пожалуйста, сделать уникальность по вхождениям в разных

строках

Пишу чат. Участники чата хранятся в таблице chat_participant (это m2m юзер-чат). Как мне сделать так, чтобы все чаты были уникальны? Ну, то есть, для любого набора юзеров, если юзеры уже есть вместе в каком-то из чатов, вернуть ошибку? Хочу избежать raise condition при создании чата

9 ответов

10 просмотров

id сделать ключевым полем может надо?(я новичок)

если вы не умеете проектировать БД, то лучше не надо. поручите более опытному человеку

Можно ведь научиться приводит к нормальным формам.

он не знает как создать unique key по 2м полям

Нет, нужно чтобы две и более строки проверялись по условию "нет строк с таким же перечнем user_id, но с другим chat_id". Такое разве что при помощи check constraint на результат вызова проверяющей функции можно запилить. Но это мрак и ад.

Nikolai-Pakhtusov Автор вопроса

А что не так с БД?

В чат добавить поле user_hash. Считать хэш-функцию при изменении состава чата и изменять поле. Проверять что хэш уникален, если нет — проверять что чаты действительно идентичны и выдавать ошибку

Nikolai-Pakhtusov Автор вопроса
B o g d a n
В чат добавить поле user_hash. Считать хэш-функцию...

Изящно, про хеши не подумал, спасибо большое!

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Легче писать на C++ чем на C, если полностью не изучать C++, а знать только основное?
Алмаз
8
Карта сайта