Задать вопрос
@exxagw

Как спроектировать БД для диалогов?

Диалог имеет от 2х пользователей ( 4, 5, 10 человек и тд).

Прежде я писал диалогу в "users" людей через запятую, т.е.:
dialog_id | users
1 | 2,3,4,5

И при выводе своих диалогов использовал такую конструкцию:
WHERE users LIKE '{$user_id},%' OR  users LIKE '%,{$user_id}' OR  users LIKE '%,{$user_id},%'


Есть ли более "красивые" методы связи диалога и пользователя?
Вариант завести еще одну таблицу dilog_users
dialog_id | user_id
1 | 2
1 | 3
1 | 4
1 | 5

Но мне кажется это не реально раздует бд, да и разницы особо не будет.

p.s. диалоги на пхп и нода для сокетов (ну и части логики)
  • Вопрос задан
  • 358 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@bnytiki
Есть ли более "красивые" методы связи диалога и пользователя?
Вариант завести еще одну таблицу dilog_users
dialog_id | user_id
1 | 2
1 | 3
1 | 4
1 | 5

Но мне кажется это не реально раздует бд, да и разницы особо не будет.


MySQL - это РЕЛЯЦИОННАЯ СУБД.
Для нее абсолютно нормально и совершенно естественно хранить данные именно так.
Про раздувание СУБД не стоит волноваться - современные СУБД спокойно хранят миллиарды строк и быстро с ними работают.
Метод же с LIKE - абсолютно неестественен для реляционных СУБД, что по мере "раздувания" СУБД приведет к крайне медленной работе.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
LIKE - дико медленная операция, ее стоит использовать в исключительно редких случаях и то, для маленьких таблиц.

Ваш вариант MANY_TO_MANY ниже - на порядки лучше.
Ответ написан
Комментировать
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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