|
|
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, никак не могу придумать хорошую структуру для чата с учетом условий: - Пользователь может общаться тет-а-тет с другим пользователем. - Может общаться с группой пользователей. - Может общаться в комнате чата. Должны также присутствовать активные диалоги(пример: whatsapp, vk, fb.....) С первыми двумя условиями нет проблем, сомнения возникают с третьим условием, как правильно хранить и связывать данные. К примеру есть таблицы: users id, login rooms id, name Вот дальше уже моя голова не варит - как правильно составить таблицу сообщений(с учетом условий выше) и таблицу активных диалогов(или лучше отталкиваться от таблицы сообщений?) Буду очень благодарен за развернутый ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 09:39 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Первые три требования говорят об одном и том же и практически ничем не отличаются друг от друга. Четвёртое вообще не имеет никакого отношения к базе данных и никак в ней не отображается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 14:05 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarer, насчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение. проблема с комнатами и с таблицей сообщений, уверен, что сложного ничего нет, но уже второй день парюсь над этим и уже адекватно мыслить не получается. вся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет. users id, name rooms id, name dialogs id, name dialog_users id, dialog_id, user_id messages id, dialog_id, user_id, text ^^^ Примерно такая структура пока в голове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 17:51 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
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 не сможет исполнять ее роль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:05 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, тогда придется добавить еще колонку is_room (0|1) или type (public/private) Структура такая, что человек может отдельно выбрать комнату и войти в него или выходить(эти комнаты всегда видны всем пользователям), а есть еще диалоги пользователей между собой(как лично, так и группой) - они должны быть видны только участникам группы. Вот в этом я и торможу, никак не могу подружить их..плюс еще из-за долгого раздумья все перемешалось.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:20 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERКот Матроскин, тогда придется добавить еще колонку is_room (0|1) или type (public/private) Ну да, придется добавить. Просто имхо очевидно, что комната - это такой специальный вид диалога, уж с точки зрения хранения сообщений так точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:29 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Также была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room) Надеюсь, что кто-нибудь предложит вариант получше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:30 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, спасибо за отклик. если никто не предложит вариант получше, то сделаю типизированние пользователей, т.к. так будет проще работать и для базы данных. пока подожду еще.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:34 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, матроскин правильно же сказал есть пользователи есть болтовня есть типы болтовни всё ах да, есть группы для определённого типа болтовни. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:34 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERТакже была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room) Надеюсь, что кто-нибудь предложит вариант получше Нет, это очень странная мысль. Например, комната очевидно не может писать сообщения, создавать диалоги. Вам придется писать кучу проверочного кода "а не комнату ли мы добавляем в диалог?", "А не от имени комнаты ли мы постим сообщение?" и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:38 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERнасчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение. Но не нужно. Активные диалоги - это сугубо клиентская информация, на сервере ей делать нечего. Ну а всякий второстепенный функционал типа "журнала"... там можно придумывать сколько угодно. IceJOKERвся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет. Тут нет никакой путаницы. Тет-а-тет - это такая же комната, просто без признака "общая". Например, можно считать, что это приватная комната, созданная инициатором, пригласившим собеседника - тогда инициатор сможет при необходимости пригласить в разговор третьего и четвёртого. Можно иначе... просто продумать, какое поведение хочется в каком случае и выбрать подходящую модель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:38 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинIceJOKERТакже была мысль добавить поле type для users. (т.е. комнаты добавлять как обычных пользователей, но с type = room) Надеюсь, что кто-нибудь предложит вариант получше Нет, это очень странная мысль. Например, комната очевидно не может писать сообщения, создавать диалоги. Вам придется писать кучу проверочного кода "а не комнату ли мы добавляем в диалог?", "А не от имени комнаты ли мы постим сообщение?" и т.п. Они будут один раз создаваться и все, ими никто не будет пользоваться, а пользователи их будут видеть исключительно в списке комнат, в остальных местах с помощью условия исключаем их из списка. Это позволит задавать описание комнатам, иконку присвоить комнате и т.д., а если добавить dialog как диалог в комнате(т.е. с флагом is_room), то там такой возможности не будет или будет , но громоздко(к примеру в диалогах пользователей можно будет иконку собеседника показывать, либо одного из пользователей беседы, а как такое провернуть с диалогом?) Опять же запутался , у меня уже голова кругом от этого Оо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 18:59 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerIceJOKERнасчет четвертого я знаю, можно выбрать все диалоги в которых пользователь писал сообщение. Но не нужно. Активные диалоги - это сугубо клиентская информация, на сервере ей делать нечего. Ну а всякий второстепенный функционал типа "журнала"... там можно придумывать сколько угодно. IceJOKERвся путаница из-за общих комнат, к которым любой пользователь может подключиться и выходить когда ему захочется, но при этом он должен иметь возможность общаться с другими пользователями и тет-а-тет. Тут нет никакой путаницы. Тет-а-тет - это такая же комната, просто без признака "общая". Например, можно считать, что это приватная комната, созданная инициатором, пригласившим собеседника - тогда инициатор сможет при необходимости пригласить в разговор третьего и четвёртого. Можно иначе... просто продумать, какое поведение хочется в каком случае и выбрать подходящую модель. 1. Я это и имел в виду, что на стороне клиента можно будет это сделать..с этим нет проблем. 2. еще раз объясняю, что нет проблем с пользователями, проблема возникает с комнатами, т.к. КОМНАТЫ - ОБЩЕДОСТУПНЫ, а общение между пользователями доступно только этим пользователям. вот и не могу придумать правильный вариант как их совместить - добавить столбец к пользователям is_room(или type) и создавать комнаты как пользователей и в нужном месте через условие выбрать исключительно комнаты или исключительно пользователей...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 19:04 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, Ещё у сообщения должен быть time_stamp или ключ на "родительское" сообщение, чтобы сообщения можно было загружать по порядку их поступления(или как-то ещё). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 20:51 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
I dont knowIceJOKER, Ещё у сообщения должен быть time_stamp или ключ на "родительское" сообщение, чтобы сообщения можно было загружать по порядку их поступления(или как-то ещё). с этим проблем нет, нужно только решить мою проблему, с остальным сам с=разберусь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 20:56 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Неужели нет других мыслей как лучше сделать? Пока самое лучшее предложение было не создавать для комнат отдельную таблицу, но как тогда лучше хранить комнату так и не узнал(кроме как присвоить диалогу флаг is_room или сделать пользователя как комнату). Еще раз повторюсь, что комната - это специальный вид беседы, т.к. он должен быть доступен всем, а беседы между пользователями доступны лишь тем пользователям, которые есть в беседе(т.е. они не видны в общем списке, как комнаты). ^^^ Буду просто очень благодарен за очень хорошую идею( могу даже на печеньки немного денег перевести за помощь =) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 06:59 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, тем не менее, не ясна постановка задачи. напиши толком все правила еще раз. Пока я понял только что есть два способа ведется бесед - в комнатах доступно всем, в частных беседах контролируется участниками беседы. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 07:29 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
MasterZivIceJOKER, тем не менее, не ясна постановка задачи. напиши толком все правила еще раз. Пока я понял только что есть два способа ведется бесед - в комнатах доступно всем, в частных беседах контролируется участниками беседы. Так? ДА, вы правильно поняли. Есть комнаты - они доступны всем, можно входить в комнату и общаться, можно выходить, от этого не меняются, все время доступны всем и каждому. Есть беседы(как тет-а-тет, так группой) - они доступны лишь участникам беседы и не видны другим, пока один из участников не добавит пользователя в него(это первое отличие от комнаты) и при выходе последнего из него - беседа исчезает(второе отличие, т.к. комнаты останутся так и работать, не важно есть там участники или нет). Также нужно учесть, что для комнат должна быть возможность устанавливать иконку и название как минимум - это подчеркиваю , т.к. выше предложили метод, по которому трудно будет реализовать такое. Для обычных бесед иконка для беседы будет браться из аватарок пользователей Если что непонятно - спрашивайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 07:38 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, я перечитал тему два раза и так и не понял почему ты против предложения Кота Матроскина? Есть диалоги и комнаты. Комнаты доступны всем, диалоги только избранным лицам. Ну и в чем проблема? Диалог - это та же комната, только с закрытой (может быть даже на ключ) дверью, а не открытой для всех аркой. То есть должна быть таблица Код: plaintext Понятно, что есть табличка Код: plaintext Ну и понятно табличка Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 08:15 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER , а вот решение с записью общих комнат в таблицу пользователей вообще непонятно. Вы, как автор данного преложения, объясните пожалуйста, как оно будет реализовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 08:17 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.Fontaine, это решение не нравится тем, что у диалогов будут иконки...т.е. - Если смотреть без комнат, то при создании нового диалога, в качестве иконки будет стоять аватар одного из участников и не придется для каждого диалога присваивать иконку , т.е. в диалоге не будет лишнего столбца icon , эту роль на себя возьмет столбец avatar из таблицы users , и не будет столбца type , т.к. эту роль на себя возьмет столбец type из таблицы users и плюс если учесть, что записи в users будет меньше чем в dialogs (т.к. в среднем хотя бы каждый второй создаст 1-2 диалога), то не лучше ли минимизировать эту таблицу ? в случае, если комната будет выступать как пользователь(с type = room) , то нужно будет следить за type при работе с пользователями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 09:44 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERMr.Fontaine, это решение не нравится тем, что у диалогов будут иконки...т.е.<>.кхммм, а кто вы по профессии ? какова ваша роль в этом проекте ? осторожно интересуюсь: CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 11:12 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
софтварер отпедалировал важную сторону обобщения всех общений -- легкая манипуляция "типом" по решению участников -- диалог легко превращается в конференцию, если участники не возражают и вызвали соответствующую функцию. Если же все "типы" жестко лежат по отдельным табличкам -- такое усовершенствование вашего поделия затруднено необходимостью миграции данного из таблички в табличку. т.ч. слушайте софтварера -- у него глаз намётан. а ваши проблемы с типом и "лишним простаивающим полем" иконки для диалогов -- пустое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 11:19 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERэто решение не нравится тем, что у диалогов будут иконки...т.е. - Если смотреть без комнат, то при создании нового диалога, в качестве иконки будет стоять аватар одного из участников а какого именно участника диалога? случайным образом будете определять? IceJOKER и не будет столбца type , т.к. эту роль на себя возьмет столбец type из таблицы users и плюс если учесть, что записи в users будет меньше чем в dialogs (т.к. в среднем хотя бы каждый второй создаст 1-2 диалога), то не лучше ли минимизировать эту таблицу ? ну не будет столбца type в таблице диалогов, зато такой же столбец появится в users, хотя он там не нужен IceJOKERв случае, если комната будет выступать как пользователь(с type = room) , то нужно будет следить за type при работе с пользователями. Как в этом случае сообщения записывать будете? какой идентификатор будете записывать в поле dialog_id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 12:37 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
осторожно интересуюсьIceJOKERMr.Fontaine, это решение не нравится тем, что у диалогов будут иконки...т.е.<>.кхммм, а кто вы по профессии ? какова ваша роль в этом проекте ? осторожно интересуюсь: CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы? Эти конструкции знакомы, но увы в моем случае нет возможности ими воспользоваться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39022010&tid=1540500]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 507ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...