powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для чата с комнатами
25 сообщений из 61, страница 1 из 3
Проектирование БД для чата с комнатами
    #39021431
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, никак не могу придумать хорошую структуру для чата с учетом условий:
- Пользователь может общаться тет-а-тет с другим пользователем.
- Может общаться с группой пользователей.
- Может общаться в комнате чата.

Должны также присутствовать активные диалоги(пример: whatsapp, vk, fb.....)

С первыми двумя условиями нет проблем, сомнения возникают с третьим условием, как правильно хранить и связывать данные.
К примеру есть таблицы:
users
id, login

rooms
id, name

Вот дальше уже моя голова не варит - как правильно составить таблицу сообщений(с учетом условий выше) и таблицу активных диалогов(или лучше отталкиваться от таблицы сообщений?)

Буду очень благодарен за развернутый ответ.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39021718
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первые три требования говорят об одном и том же и практически ничем не отличаются друг от друга. Четвёртое вообще не имеет никакого отношения к базе данных и никак в ней не отображается.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39021985
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

насчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение.
проблема с комнатами и с таблицей сообщений, уверен, что сложного ничего нет, но уже второй день парюсь над этим и уже адекватно мыслить не получается.
вся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет.
users
id, name

rooms
id, name

dialogs
id, name

dialog_users
id, dialog_id, user_id

messages
id, dialog_id, user_id, text

^^^
Примерно такая структура пока в голове.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39021998
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERusers
id, name

rooms
id, name

dialogs
id, name

dialog_users
id, dialog_id, user_id

messages
id, dialog_id, user_id, text

^^^
Примерно такая структура пока в голове.

Непонятно зачем Вам rooms в этой структуре - dialogs не сможет исполнять ее роль?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022010
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

тогда придется добавить еще колонку is_room (0|1) или type (public/private)
Структура такая, что человек может отдельно выбрать комнату и войти в него или выходить(эти комнаты всегда видны всем пользователям), а есть еще диалоги пользователей между собой(как лично, так и группой) - они должны быть видны только участникам группы.
Вот в этом я и торможу, никак не могу подружить их..плюс еще из-за долгого раздумья все перемешалось..
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022020
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERКот Матроскин,

тогда придется добавить еще колонку is_room (0|1) или type (public/private)


Ну да, придется добавить.
Просто имхо очевидно, что комната - это такой специальный вид диалога, уж с точки зрения хранения сообщений так точно.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022021
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room)
Надеюсь, что кто-нибудь предложит вариант получше
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022028
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

спасибо за отклик. если никто не предложит вариант получше, то сделаю типизированние пользователей, т.к. так будет проще работать и для базы данных.
пока подожду еще..
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022030
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IceJOKER,

матроскин правильно же сказал

есть пользователи
есть болтовня
есть типы болтовни

всё

ах да, есть группы для определённого типа болтовни.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022033
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERТакже была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room)
Надеюсь, что кто-нибудь предложит вариант получше

Нет, это очень странная мысль. Например, комната очевидно не может писать сообщения, создавать диалоги. Вам придется писать кучу проверочного кода "а не комнату ли мы добавляем в диалог?", "А не от имени комнаты ли мы постим сообщение?" и т.п.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022034
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERнасчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение.
Но не нужно. Активные диалоги - это сугубо клиентская информация, на сервере ей делать нечего. Ну а всякий второстепенный функционал типа "журнала"... там можно придумывать сколько угодно.

IceJOKERвся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет.
Тут нет никакой путаницы. Тет-а-тет - это такая же комната, просто без признака "общая". Например, можно считать, что это приватная комната, созданная инициатором, пригласившим собеседника - тогда инициатор сможет при необходимости пригласить в разговор третьего и четвёртого. Можно иначе... просто продумать, какое поведение хочется в каком случае и выбрать подходящую модель.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022045
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинIceJOKERТакже была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room)
Надеюсь, что кто-нибудь предложит вариант получше

Нет, это очень странная мысль. Например, комната очевидно не может писать сообщения, создавать диалоги. Вам придется писать кучу проверочного кода "а не комнату ли мы добавляем в диалог?", "А не от имени комнаты ли мы постим сообщение?" и т.п.

Они будут один раз создаваться и все, ими никто не будет пользоваться, а пользователи их будут видеть исключительно в списке комнат, в остальных местах с помощью условия исключаем их из списка.
Это позволит задавать описание комнатам, иконку присвоить комнате и т.д., а если добавить dialog как диалог в комнате(т.е. с флагом is_room), то там такой возможности не будет или будет , но громоздко(к примеру в диалогах пользователей можно будет иконку собеседника показывать, либо одного из пользователей беседы, а как такое провернуть с диалогом?)

Опять же запутался , у меня уже голова кругом от этого Оо
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022049
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerIceJOKERнасчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение.
Но не нужно. Активные диалоги - это сугубо клиентская информация, на сервере ей делать нечего. Ну а всякий второстепенный функционал типа "журнала"... там можно придумывать сколько угодно.

IceJOKERвся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет.
Тут нет никакой путаницы. Тет-а-тет - это такая же комната, просто без признака "общая". Например, можно считать, что это приватная комната, созданная инициатором, пригласившим собеседника - тогда инициатор сможет при необходимости пригласить в разговор третьего и четвёртого. Можно иначе... просто продумать, какое поведение хочется в каком случае и выбрать подходящую модель.

1. Я это и имел в виду, что на стороне клиента можно будет это сделать..с этим нет проблем.

2. еще раз объясняю, что нет проблем с пользователями, проблема возникает с комнатами, т.к. КОМНАТЫ - ОБЩЕДОСТУПНЫ, а общение между пользователями доступно только этим пользователям. вот и не могу придумать правильный вариант как их совместить - добавить столбец к пользователям is_room(или type) и создавать комнаты как пользователей и в нужном месте через условие выбрать исключительно комнаты или исключительно пользователей......
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022114
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER,

Ещё у сообщения должен быть time_stamp или ключ на "родительское" сообщение, чтобы сообщения можно было загружать по порядку их поступления(или как-то ещё).
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022116
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I dont knowIceJOKER,

Ещё у сообщения должен быть time_stamp или ключ на "родительское" сообщение, чтобы сообщения можно было загружать по порядку их поступления(или как-то ещё).
с этим проблем нет, нужно только решить мою проблему, с остальным сам с=разберусь
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022220
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели нет других мыслей как лучше сделать?
Пока самое лучшее предложение было не создавать для комнат отдельную таблицу, но как тогда лучше хранить комнату так и не узнал(кроме как присвоить диалогу флаг is_room или сделать пользователя как комнату).

Еще раз повторюсь, что комната - это специальный вид беседы, т.к. он должен быть доступен всем, а беседы между пользователями доступны лишь тем пользователям, которые есть в беседе(т.е. они не видны в общем списке, как комнаты).

^^^

Буду просто очень благодарен за очень хорошую идею( могу даже на печеньки немного денег перевести за помощь =) )
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022227
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER,

тем не менее, не ясна постановка задачи.
напиши толком все правила еще раз.
Пока я понял только что есть два способа ведется бесед - в комнатах доступно всем, в частных беседах контролируется участниками беседы. Так?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022230
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivIceJOKER,

тем не менее, не ясна постановка задачи.
напиши толком все правила еще раз.
Пока я понял только что есть два способа ведется бесед - в комнатах доступно всем, в частных беседах контролируется участниками беседы. Так?

ДА, вы правильно поняли.
Есть комнаты - они доступны всем, можно входить в комнату и общаться, можно выходить, от этого не меняются, все время доступны всем и каждому.
Есть беседы(как тет-а-тет, так группой) - они доступны лишь участникам беседы и не видны другим, пока один из участников не добавит пользователя в него(это первое отличие от комнаты) и при выходе последнего из него - беседа исчезает(второе отличие, т.к. комнаты останутся так и работать, не важно есть там участники или нет).
Также нужно учесть, что для комнат должна быть возможность устанавливать иконку и название как минимум - это подчеркиваю , т.к. выше предложили метод, по которому трудно будет реализовать такое.
Для обычных бесед иконка для беседы будет браться из аватарок пользователей

Если что непонятно - спрашивайте.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022233
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER, я перечитал тему два раза и так и не понял почему ты против предложения Кота Матроскина?
Есть диалоги и комнаты. Комнаты доступны всем, диалоги только избранным лицам. Ну и в чем проблема? Диалог - это та же комната, только с закрытой (может быть даже на ключ) дверью, а не открытой для всех аркой.
То есть должна быть таблица
Код: plaintext
dialogs (id, name, icon_image, type)
Поле type содержит значения public/privat, где public - это обычные комнаты, доступные всем, privat - диалоги тет-а-тет или группой (это если по большому счёту нет разницы между тет-а-тет и группой, то есть один пользователь пригласил другого поговорить, и пока они говорят вдвоём это тет-а-тет, а как кто-то из этих двоих захочет пригласить третьего, то после нажатия кнопки приглашения, в диалоге появился третий пользователь, то диалог автоматически станет групповым. если же существует разница между тет-а-тет и групповыми, в том что в тет-а-тет нельзя добавлять новых пользователей, а в групповой диалог можно, то конечно должно быть третье значение - group, но это честно говоря, уже мелочи реализации интерфейса и на структуре таблиц это никак не сказывается)
Понятно, что есть табличка
Код: plaintext
dialogs_users (dialog_id, user_id)
. С этой табличкой думаю неважен тип комнаты. Можно писать всех кто зашёл в комнату, хоть в общую, хоть в диалог. Разница только в том, что добавление пользователя в общую комнату происходит в момент нажатия пользователем на название общей комнаты, а в диалог только по специальной кнопке создания диалога (пользователь, создающий диалог становится один из участников) или кнопке приглашения в диалог.
Ну и понятно табличка
Код: plaintext
dialogs_messages (dialog_id, user_id, date, text)
естественно я опустил таблицу пользователей
Код: plaintext
users (user_id, nickname, password)
Естественное и лежащее на поверхности решение, почему идёт отторжение этого решения не понимаю. Из-за иконок что ли? Так тут просто надо подумать какие иконки записывать. У общих комнат может своя универсальная иконка или админ в момент создания комнаты может ей иконку присваивать. У диалогов тоже всякие варианты могут быть или иконка из профиля пользователя создавшего комнату или пользователь, создающий диалог пдобно админу присваивает любую понравившуюся ему иконку. Это это логика программы. Структура БД тут вообще ни причём
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022235
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER , а вот решение с записью общих комнат в таблицу пользователей вообще непонятно. Вы, как автор данного преложения, объясните пожалуйста, как оно будет реализовано.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022284
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontaine,

это решение не нравится тем, что у диалогов будут иконки...т.е. - Если смотреть без комнат, то при создании нового диалога, в качестве иконки будет стоять аватар одного из участников и не придется для каждого диалога присваивать иконку , т.е. в диалоге не будет лишнего столбца icon , эту роль на себя возьмет столбец avatar из таблицы users , и не будет столбца type , т.к. эту роль на себя возьмет столбец type из таблицы users и плюс если учесть, что записи в users будет меньше чем в dialogs (т.к. в среднем хотя бы каждый второй создаст 1-2 диалога), то не лучше ли минимизировать эту таблицу ?

в случае, если комната будет выступать как пользователь(с type = room) , то нужно будет следить за type при работе с пользователями.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022353
IceJOKERMr.Fontaine,

это решение не нравится тем, что у диалогов будут иконки...т.е.<>.кхммм, а кто вы по профессии ?
какова ваша роль в этом проекте ?


осторожно интересуюсь:
CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022360
софтварер отпедалировал важную сторону обобщения всех общений -- легкая манипуляция "типом" по решению участников
-- диалог легко превращается в конференцию, если участники не возражают и вызвали соответствующую функцию.

Если же все "типы" жестко лежат по отдельным табличкам -- такое усовершенствование вашего поделия затруднено необходимостью миграции данного из таблички в табличку.


т.ч. слушайте софтварера -- у него глаз намётан. а ваши проблемы с типом и "лишним простаивающим полем" иконки для диалогов -- пустое.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022480
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERэто решение не нравится тем, что у диалогов будут иконки...т.е. - Если смотреть без комнат, то при создании нового диалога, в качестве иконки будет стоять аватар одного из участников
а какого именно участника диалога? случайным образом будете определять?

IceJOKER и не будет столбца type , т.к. эту роль на себя возьмет столбец type из таблицы users и плюс если учесть, что записи в users будет меньше чем в dialogs (т.к. в среднем хотя бы каждый второй создаст 1-2 диалога), то не лучше ли минимизировать эту таблицу ?
ну не будет столбца type в таблице диалогов, зато такой же столбец появится в users, хотя он там не нужен
IceJOKERв случае, если комната будет выступать как пользователь(с type = room) , то нужно будет следить за type при работе с пользователями.
Как в этом случае сообщения записывать будете? какой идентификатор будете записывать в поле dialog_id?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022491
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
осторожно интересуюсьIceJOKERMr.Fontaine,

это решение не нравится тем, что у диалогов будут иконки...т.е.<>.кхммм, а кто вы по профессии ?
какова ваша роль в этом проекте ?


осторожно интересуюсь:
CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы?
Эти конструкции знакомы, но увы в моем случае нет возможности ими воспользоваться
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для чата с комнатами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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