powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для чата с комнатами
61 сообщений из 61, показаны все 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
Проектирование БД для чата с комнатами
    #39022497
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда поймёте, что комнаты и диалоги это одна и та же сущность, и при варианте
таблица dialogs
id name user_id1 'Диалог1' 2
таблица users
id name type1 'Комната' 'room'2 'Пользователь' 'user'
таблица messages
dialog_id user_id text12'мысль для комнаты'12'тема для диалога'
Вы при выборе сообщений для комнат и диалогов просто не сможете определить какое сообщение где показывать, то и придёте к варианту, о котором Вам все тут говорят
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022502
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontaine,

1. Если тет-а-тет = собеседника, если больше участников, то уже придумаю как, это уже не важно (можно по 4 аватара выводить случайно, можно просто дефолтный аватар.

2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота

3. Как обычно, в таком виде получается что пользователи между собой общаются, которые сами же добавились в беседу к этому пользователю(вернее к комнате). Первый пользователь написал - создалась беседа и все, когда последний вышел, то не удаляем эту беседу(запись из dialogs), т.к. т.е. у каждого users type = room будет по одной записи dialogs - раз и навсегда
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022528
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я Вашу мысль понял. Если она Вам кажется более правильной, чем версия Кота Матроскина, то вопросов нет
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022529
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERосторожно интересуюсь:
CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы?
Эти конструкции знакомы, но увы в моем случае нет возможности ими воспользоваться

Система без единого условного оператора в коде - это будет интересно, да
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022538
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERMr.Fontaine,
2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота

ну в Вашей схеме то, что Вы называете комнатами, и являются своеобразными ботами. Молчаливыми, которые круглосуточно сидят только в своей беседе, никуда больше не ходят и ничего не пишут.
Так что можно реализовать тип "блуждающий бот", которого научить писать и тогда глядишь и других пользователей и не надо будет.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022544
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.FontaineЯ Вашу мысль понял. Если она Вам кажется более правильной, чем версия Кота Матроскина, то вопросов нет

в том то и дело, что не могу выбрать, что правильнее, а хотелось бы заложить хороший фундамент, чем потом переделывать все.
может в дальнейшем захочу сделать возможность пользователям добавлять публичные беседы, тогда они смешаются с комнатами или придется сделать такую структуру:
dialogs
id, user_id, icon, name, is_room(0,1), type(public/friends/private)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022545
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

бэкэнд - это сервис предоставляющий базу и api для работы с ним и пока, если я не ошибаюсь, там нет условных операторов(if...)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022550
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.FontaineIceJOKERMr.Fontaine,
2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота

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

но у ботов будет другая роль, тогда как их отличить от комнат и пользователей? сделать dialogs:
id, ...., type(room, bot), access(public/friends/private)
???

если сделать как мой вариант
users
id, ...., type(room, bot)

тогда можно будет, к примеру, для бота установить описание(описание пользователя), ставить ему вечный online, устраивать викторины через бота.

p.s. я не пишу, что мой вариант лучше, а другие хуже, я просто для себя хочу понять какой лучше и наконец остановиться на том или ином варианте
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022557
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERКот Матроскин,

бэкэнд - это сервис предоставляющий базу и api для работы с ним и пока, если я не ошибаюсь, там нет условных операторов(if...)
Это зависит от того, что Вы подразумеваете под API. Если это какие-то методы типа "СоздатьПользователя", "СоздатьДиалог" и т.п. - они будут написаны на некоем языке программирования, который скорее всего позволяет использовать условные операторы.
Если под API Вы понимаете только возможность делать Insert'ы и delet'ы в подготовленную структуру - то условные операторы Вам и не нужны, достаточно обьявить поле Icon в таблице dialog nullable, и у внешнего кода будет возможность записывать и отображать в dialog иконку, когда она нужна, и не записывать/не отображать тогда, когда она не нужна.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022563
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин,

http://parse.com
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022569
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER, чё-то Вы меня сосем запутали....
Конечно понятно, что у обсуждаемых ботов будет роль, отличная от молчаливых комнатных ботов.
Молчаливые боты, по Вашей же идее, создаются, чтобы постоянно сидеть в своей беседе, и так как там кто-то сидит, и беседа удаляться не будет никогда, превращаясь постепенно в комнату, обросшую пылью.
У обсуждаемых же ботов будет роль как можно более походить на пользователей: бегать по имеющимся комнатам, создавать свои беседы, добиваться приглашения в какую-то чужую беседу и писать, писать, писать....
Это два совершенно разных типа ботов. Только вот зачем их пихать в таблицу dialogs ????
Создаётся запись в таблице users с типом 'bot' а дальше просто автоматизировать действия пользователя, но никаких дополнительных требований к структуре БД для бота не требуется.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022583
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.Fontaine,

я имел в виду ботов как в Telegram, которые когда то были в icq.
Они не будут бегать и делать что-то, а будут как комнаты пылиться, пока пользователь не напишет ему, там уже начнется беседа с пользователем, где пользователь может играть в викторину и т.д.
т.е. по функционалу бот будет точно таким же как комната, но с отличием, что он будет общаться с участниками беседы(отвечать на определенные команды).

я так и писал, что можно добавить столбец type к users и присвоить значение bot(или room, дефолт - NULL , если это обычный пользователь)

Получается такая иерархия:
Пользователи<-Комнаты<-Боты

В остальном все будет как обычно, пользователи могут писать пользователям, могут писать в комнаты и ботам, т.е. dialogs так и останется:
id, user_id, icon, name, type(public...) /* где user_id - это создатель диалога(беседы) */


p.s. Ботов я для примера привел, имелось в виду, чтоб в дальнейшем была возможность расширить при необходимости, нужно как можно дальше в будущее посмотреть.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022588
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKER, ну и собери теперь все свои мысли вместе и нарисуй схему БД
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39022597
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.FontaineIceJOKER, ну и собери теперь все свои мысли вместе и нарисуй схему БД
То есть вы согласны с моим вариантом? Или вы хотите посмотреть на конечный результат? Или вам просто стало пофиг и решили забить? :D

так или иначе спасибо за участие, но пока не хочу спешить и еще подожду, может все таки увижу вариант, который сразу устроит(aka любовь с первого взгляда)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023048
contacrer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IceJOKER, так и хотелось бы посмотреть о чём мы разговариваем на данный момент.
Например, существует ли на данный момент в схеме БД таблица rooms, сделали ли Вы в таблице dialogs поле type и access, какие поля в таблице users и messages, где хранятся списки участников диалогов
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023053
Фотография bootty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человек может присоединиться в процессе разговора или выйти из разговора? Если да, то нужно ли ему показывать то, что было до его подключения? В случае постоянно работающей комнаты лог может быть огромен. А после его выхода из разговора/комнаты ему надо показывать его же историю?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023464
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
contacrer,

решил обойтись без таблицы rooms, пока (в тестовом режиме) сделал rooms as users;
пока окончательно не решил, надеюсь на чудо :D кто знает, может схема таблицы упадет на голову..
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023472
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boottyЧеловек может присоединиться в процессе разговора или выйти из разговора? Если да, то нужно ли ему показывать то, что было до его подключения? В случае постоянно работающей комнаты лог может быть огромен. А после его выхода из разговора/комнаты ему надо показывать его же историю?

Может присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится.


p.s. если вы для себя хотите что-то узнать, то подчеркните это, а то непонятно - хотите вы помочь, или для себя что-то узнаете.
если хотите помочь - то вопросы выше не важны, мне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023529
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится.
Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023538
Фотография bootty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERмне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях
Советовать сложно: из описания не могу понять, в чем принципиальная разница между комнатой и беседой. В том, чтобы показать пользователю только комнаты и беседы, которые он создал или в которые его пригласили? Или в том, что у беседы есть конкретный автор?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023581
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerIceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится.
Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов.

База данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023583
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинБаза данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда.
Когда появится нужда, тогда можно будет подумать об оптимальном способе её удовлетворить. Конкретно криво проектировать сегодня ради призрачной потребности "когда-нибудь" - как это называется? С тем же успехом можно потребовать написать sql.ru на Лиспе - ведь рано или поздно потребуется подключать к нему искусственный интеллект.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023597
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerIceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится.
Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов.

Простенький чат-сервер - что вы под этим подразумеваете ? Хранить данные в течении сессии? Если да, то не подходит, т.к. данные могут храниться как 1 день, так и месяц(ровно столько, сколько пользователь посчитает нужным оставлять беседу)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023601
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boottyIceJOKERмне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях
Советовать сложно: из описания не могу понять, в чем принципиальная разница между комнатой и беседой. В том, чтобы показать пользователю только комнаты и беседы, которые он создал или в которые его пригласили? Или в том, что у беседы есть конкретный автор?

я же выше дважды по пальцам объяснил разницу:
беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда
комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023604
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКот МатроскинБаза данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда.
Когда появится нужда, тогда можно будет подумать об оптимальном способе её удовлетворить. Конкретно криво проектировать сегодня ради призрачной потребности "когда-нибудь" - как это называется?

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

Вся эта разница - исключительно в поведении приложения, с точки зрения хранения данных полностью достаточно флага в таблице dialogs.
Кстати, как планируете реализовать "приглашения к беседе"? Флагом в таблице dialogs_users?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023624
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинIceJOKERя же выше дважды по пальцам объяснил разницу:
беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда
комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет.

Вся эта разница - исключительно в поведении приложения, с точки зрения хранения данных полностью достаточно флага в таблице dialogs.
Кстати, как планируете реализовать "приглашения к беседе"? Флагом в таблице dialogs_users?

вот я и пока остановился на флаге в users, а не на dialogs(свой выбор недавно объяснял), но пока в тестовом режиме.
Пока думаю без приглашения сделать, т.е. пользователь может сразу добавить своих друзей в беседу.
dialog_users
id, dialog_id, user_id, confirm(можно столбец подтверждения тоже)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023625
Фотография bootty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERя же выше дважды по пальцам объяснил разницу:
беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда
комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет.
Нет, я логику действий не совсем понимаю.

Общий чат, он как стена — кто хочешь заходит, смотрит, пишет и отвечает другим, возможно удаляет или исправляет свои сообщения.

В случае с беседой я позвал конкретных людей, что-то обсудили и договорились. Для чего выходить из нее? Висит себе и висит, хлеба не просит, в случае необходимости можно поднять и вернуться к обсуждению, иначе она сама уходит вниз и не мешается.

Кстати, а приватные сообщения в чатах будут доступны? Помнится, когда лет 15 назад сидел в чатах, такой функционал уже был. Как это будет реализовано? У сообщения в комнате будет указан конкретный адресат?

А модерирование будет? Удаление из комнат/бесед пользователей, удаление сообщений, баны и т.п.?
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023626
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскина что, есть уверенность что именно быстродействие серверной части является критичным требованием к системе?
Вопрос не столько быстродействия, сколько ресурсов. Эта "серверная часть" будет грузить ввод-вывод там, где этого вообще не требуется. Займёт кучу места на диске, будет туда-сюда шуршать вставками-удалениями...

Кот Матроскинни Вы ни я не знаем какие требования к системе существуют прямо сейчас.
Знаем. Никаких. Если бы существовали какие-то требования, наш друг не занимался бы подобной фигнёй :)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023628
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилось еще пару вопросов:
1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника
2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как?

p.s. я не новичок в этом деле, но и опыта не так много , поэтому написал с надеждой, что более опытные пользователи предложит варианты по-лучше, дадут рекомендации, вот чего я от вас жду, как лучше сделать, как не стоит, поэтому просьба развернуто объяснить почему стоит или не стоит делать так или иначе, а не просто написать НЕ ДЕЛАЙ ТАК
И спасибо тем, кто уже помог(-ает)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023633
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boottyIceJOKERя же выше дважды по пальцам объяснил разницу:
беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда
комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет.
Нет, я логику действий не совсем понимаю.

Общий чат, он как стена — кто хочешь заходит, смотрит, пишет и отвечает другим, возможно удаляет или исправляет свои сообщения.

В случае с беседой я позвал конкретных людей, что-то обсудили и договорились. Для чего выходить из нее? Висит себе и висит, хлеба не просит, в случае необходимости можно поднять и вернуться к обсуждению, иначе она сама уходит вниз и не мешается.

Кстати, а приватные сообщения в чатах будут доступны? Помнится, когда лет 15 назад сидел в чатах, такой функционал уже был. Как это будет реализовано? У сообщения в комнате будет указан конкретный адресат?

А модерирование будет? Удаление из комнат/бесед пользователей, удаление сообщений, баны и т.п.?

пока остановимся на комнатах и беседах (: остальное пока не важно, над этим можно будет потом подумать..
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023638
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКот Матроскина что, есть уверенность что именно быстродействие серверной части является критичным требованием к системе?
Вопрос не столько быстродействия, сколько ресурсов. Эта "серверная часть" будет грузить ввод-вывод там, где этого вообще не требуется. Займёт кучу места на диске, будет туда-сюда шуршать вставками-удалениями...

Потребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно.
Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;)
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023652
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceJOKERПоявилось еще пару вопросов:
1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника

временной меткой в dialog_users "показывать сообщения с этого момента".


IceJOKER2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как?

А Вы уверены что это нужно? Вы хотите как-то выделять ответы в диалоге/комнате? скайп никак выделяет афаир.
Если нужно - я бы сделал в message ссылку ID_prev_message.
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023661
IceJOKER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинIceJOKERПоявилось еще пару вопросов:
1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника

временной меткой в dialog_users "показывать сообщения с этого момента".


IceJOKER2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как?

А Вы уверены что это нужно? Вы хотите как-то выделять ответы в диалоге/комнате? скайп никак выделяет афаир.
Если нужно - я бы сделал в message ссылку ID_prev_message.

1. О , отличный вариант, спасибо. Первое, что мне пришло в голову - это дублирование сообщений(не пинайте, не пинайте, т.к. это 1-ое, что пришло в голову).
2. Тоже думал нужно или нет....и на всякий смотрел. Лучше уж сделаю старый добрый ответ - "%username, %
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023739
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинПотребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно. Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;)
Зато очень осмысленна разница между "нужен отдельный сервер, и диски не SATA" и "да можно впихнуть куда угодно, на загрузку почти не влияет".
...
Рейтинг: 0 / 0
Проектирование БД для чата с комнатами
    #39023995
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКот МатроскинПотребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно. Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;)
Зато очень осмысленна разница между "нужен отдельный сервер, и диски не SATA" и "да можно впихнуть куда угодно, на загрузку почти не влияет".

Тоже, в общем-то, нет. Это осмысленно в ситуации "10 серверов в датацентре, 20 разных проектов и надо их комбинировать". А если у Вас 1 сервер и 1 проект, не потребляющий и 10% мощности сервера - для чего Вам высвобождать ресурсы?

Почему-то среди IT-специалистов популярна "оптимизация ресурсов на всякий случай". Имхо это [еще] менее осмысленно, чем "гибкость и расширяемость на всякий случай"
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД для чата с комнатами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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