|
|
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Когда поймёте, что комнаты и диалоги это одна и та же сущность, и при варианте таблица dialogs id name user_id1 'Диалог1' 2 таблица users id name type1 'Комната' 'room'2 'Пользователь' 'user' таблица messages dialog_id user_id text12'мысль для комнаты'12'тема для диалога' Вы при выборе сообщений для комнат и диалогов просто не сможете определить какое сообщение где показывать, то и придёте к варианту, о котором Вам все тут говорят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 12:49 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.Fontaine, 1. Если тет-а-тет = собеседника, если больше участников, то уже придумаю как, это уже не важно (можно по 4 аватара выводить случайно, можно просто дефолтный аватар. 2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота 3. Как обычно, в таком виде получается что пользователи между собой общаются, которые сами же добавились в беседу к этому пользователю(вернее к комнате). Первый пользователь написал - создалась беседа и все, когда последний вышел, то не удаляем эту беседу(запись из dialogs), т.к. т.е. у каждого users type = room будет по одной записи dialogs - раз и навсегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 12:51 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Я Вашу мысль понял. Если она Вам кажется более правильной, чем версия Кота Матроскина, то вопросов нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:05 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERосторожно интересуюсь: CASE WHEN , IF THEN ELSE и т.п. конструкции в каком либо варианте, в каком либо языке программирования вам знакомы? Эти конструкции знакомы, но увы в моем случае нет возможности ими воспользоваться Система без единого условного оператора в коде - это будет интересно, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:05 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERMr.Fontaine, 2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота ну в Вашей схеме то, что Вы называете комнатами, и являются своеобразными ботами. Молчаливыми, которые круглосуточно сидят только в своей беседе, никуда больше не ходят и ничего не пишут. Так что можно реализовать тип "блуждающий бот", которого научить писать и тогда глядишь и других пользователей и не надо будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:17 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.FontaineЯ Вашу мысль понял. Если она Вам кажется более правильной, чем версия Кота Матроскина, то вопросов нет в том то и дело, что не могу выбрать, что правильнее, а хотелось бы заложить хороший фундамент, чем потом переделывать все. может в дальнейшем захочу сделать возможность пользователям добавлять публичные беседы, тогда они смешаются с комнатами или придется сделать такую структуру: dialogs id, user_id, icon, name, is_room(0,1), type(public/friends/private) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:19 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, бэкэнд - это сервис предоставляющий базу и api для работы с ним и пока, если я не ошибаюсь, там нет условных операторов(if...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:22 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.FontaineIceJOKERMr.Fontaine, 2. А может в дальнейшем расширю type и добавлю "типизированных пользователей", к примеру бота ну в Вашей схеме то, что Вы называете комнатами, и являются своеобразными ботами. Молчаливыми, которые круглосуточно сидят только в своей беседе, никуда больше не ходят и ничего не пишут. Так что можно реализовать тип "блуждающий бот", которого научить писать и тогда глядишь и других пользователей и не надо будет. но у ботов будет другая роль, тогда как их отличить от комнат и пользователей? сделать dialogs: id, ...., type(room, bot), access(public/friends/private) ??? если сделать как мой вариант users id, ...., type(room, bot) тогда можно будет, к примеру, для бота установить описание(описание пользователя), ставить ему вечный online, устраивать викторины через бота. p.s. я не пишу, что мой вариант лучше, а другие хуже, я просто для себя хочу понять какой лучше и наконец остановиться на том или ином варианте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:28 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERКот Матроскин, бэкэнд - это сервис предоставляющий базу и api для работы с ним и пока, если я не ошибаюсь, там нет условных операторов(if...) Это зависит от того, что Вы подразумеваете под API. Если это какие-то методы типа "СоздатьПользователя", "СоздатьДиалог" и т.п. - они будут написаны на некоем языке программирования, который скорее всего позволяет использовать условные операторы. Если под API Вы понимаете только возможность делать Insert'ы и delet'ы в подготовленную структуру - то условные операторы Вам и не нужны, достаточно обьявить поле Icon в таблице dialog nullable, и у внешнего кода будет возможность записывать и отображать в dialog иконку, когда она нужна, и не записывать/не отображать тогда, когда она не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:32 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:35 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, чё-то Вы меня сосем запутали.... Конечно понятно, что у обсуждаемых ботов будет роль, отличная от молчаливых комнатных ботов. Молчаливые боты, по Вашей же идее, создаются, чтобы постоянно сидеть в своей беседе, и так как там кто-то сидит, и беседа удаляться не будет никогда, превращаясь постепенно в комнату, обросшую пылью. У обсуждаемых же ботов будет роль как можно более походить на пользователей: бегать по имеющимся комнатам, создавать свои беседы, добиваться приглашения в какую-то чужую беседу и писать, писать, писать.... Это два совершенно разных типа ботов. Только вот зачем их пихать в таблицу dialogs ???? Создаётся запись в таблице users с типом 'bot' а дальше просто автоматизировать действия пользователя, но никаких дополнительных требований к структуре БД для бота не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:42 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.Fontaine, я имел в виду ботов как в Telegram, которые когда то были в icq. Они не будут бегать и делать что-то, а будут как комнаты пылиться, пока пользователь не напишет ему, там уже начнется беседа с пользователем, где пользователь может играть в викторину и т.д. т.е. по функционалу бот будет точно таким же как комната, но с отличием, что он будет общаться с участниками беседы(отвечать на определенные команды). я так и писал, что можно добавить столбец type к users и присвоить значение bot(или room, дефолт - NULL , если это обычный пользователь) Получается такая иерархия: Пользователи<-Комнаты<-Боты В остальном все будет как обычно, пользователи могут писать пользователям, могут писать в комнаты и ботам, т.е. dialogs так и останется: id, user_id, icon, name, type(public...) /* где user_id - это создатель диалога(беседы) */ p.s. Ботов я для примера привел, имелось в виду, чтоб в дальнейшем была возможность расширить при необходимости, нужно как можно дальше в будущее посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 13:59 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, ну и собери теперь все свои мысли вместе и нарисуй схему БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 14:11 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Mr.FontaineIceJOKER, ну и собери теперь все свои мысли вместе и нарисуй схему БД То есть вы согласны с моим вариантом? Или вы хотите посмотреть на конечный результат? Или вам просто стало пофиг и решили забить? :D так или иначе спасибо за участие, но пока не хочу спешить и еще подожду, может все таки увижу вариант, который сразу устроит(aka любовь с первого взгляда) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2015, 14:21 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKER, так и хотелось бы посмотреть о чём мы разговариваем на данный момент. Например, существует ли на данный момент в схеме БД таблица rooms, сделали ли Вы в таблице dialogs поле type и access, какие поля в таблице users и messages, где хранятся списки участников диалогов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 08:04 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Человек может присоединиться в процессе разговора или выйти из разговора? Если да, то нужно ли ему показывать то, что было до его подключения? В случае постоянно работающей комнаты лог может быть огромен. А после его выхода из разговора/комнаты ему надо показывать его же историю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 08:13 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
contacrer, решил обойтись без таблицы rooms, пока (в тестовом режиме) сделал rooms as users; пока окончательно не решил, надеюсь на чудо :D кто знает, может схема таблицы упадет на голову.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 13:16 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
boottyЧеловек может присоединиться в процессе разговора или выйти из разговора? Если да, то нужно ли ему показывать то, что было до его подключения? В случае постоянно работающей комнаты лог может быть огромен. А после его выхода из разговора/комнаты ему надо показывать его же историю? Может присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится. p.s. если вы для себя хотите что-то узнать, то подчеркните это, а то непонятно - хотите вы помочь, или для себя что-то узнаете. если хотите помочь - то вопросы выше не важны, мне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 13:19 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится. Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 14:19 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERмне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях Советовать сложно: из описания не могу понять, в чем принципиальная разница между комнатой и беседой. В том, чтобы показать пользователю только комнаты и беседы, которые он создал или в которые его пригласили? Или в том, что у беседы есть конкретный автор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 14:25 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerIceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится. Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов. База данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:03 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинБаза данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда. Когда появится нужда, тогда можно будет подумать об оптимальном способе её удовлетворить. Конкретно криво проектировать сегодня ради призрачной потребности "когда-нибудь" - как это называется? С тем же успехом можно потребовать написать sql.ru на Лиспе - ведь рано или поздно потребуется подключать к нему искусственный интеллект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:07 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerIceJOKERМожет присоединиться, выходить когда угодно, нужно показывать, сообщения беседы хранятся до тех пор, пока последний не покинет беседу, тогда беседа удалится. Тогда вообще нет смысла использовать базу данных, особенно реляционную базу данных. РСУБД проектируются для работы с ценными данными, которые должны храниться и ни в коем случае не теряться; применять их для работы с сугубо временным малоценным мусором - стрелять из пушки по воробьям. Простенький чат-сервер с хранением в памяти будет работать в десять раз быстрее, потребляя при этом в десять раз меньше ресурсов. Простенький чат-сервер - что вы под этим подразумеваете ? Хранить данные в течении сессии? Если да, то не подходит, т.к. данные могут храниться как 1 день, так и месяц(ровно столько, сколько пользователь посчитает нужным оставлять беседу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:14 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
boottyIceJOKERмне лишь нужно наиболее грамотно отделить беседу пользователей от беседы в комнате с учетом условий, что я описал в предыдущих сообщениях Советовать сложно: из описания не могу понять, в чем принципиальная разница между комнатой и беседой. В том, чтобы показать пользователю только комнаты и беседы, которые он создал или в которые его пригласили? Или в том, что у беседы есть конкретный автор? я же выше дважды по пальцам объяснил разницу: беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:17 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerКот МатроскинБаза данных может быть не только хранилищем, но и интерфейсом к данным для всяких сторонних анализаторов контекста и т.п., буде появится в них нужда. Когда появится нужда, тогда можно будет подумать об оптимальном способе её удовлетворить. Конкретно криво проектировать сегодня ради призрачной потребности "когда-нибудь" - как это называется? Почему криво? Ну да, будет медленнее - а что, есть уверенность что именно быстродействие серверной части является критичным требованием к системе? И насчет "призрачной потребности" - ни Вы ни я не знаем какие требования к системе существуют прямо сейчас. Я отметил, что возможны такие задачи, для которых наличие реляционной БД будет плюсом даже при отсутствии требования хранить данные какие-то исторически долгие сроки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:20 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERя же выше дважды по пальцам объяснил разницу: беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет. Вся эта разница - исключительно в поведении приложения, с точки зрения хранения данных полностью достаточно флага в таблице dialogs. Кстати, как планируете реализовать "приглашения к беседе"? Флагом в таблице dialogs_users? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:26 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинIceJOKERя же выше дважды по пальцам объяснил разницу: беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет. Вся эта разница - исключительно в поведении приложения, с точки зрения хранения данных полностью достаточно флага в таблице dialogs. Кстати, как планируете реализовать "приглашения к беседе"? Флагом в таблице dialogs_users? вот я и пока остановился на флаге в users, а не на dialogs(свой выбор недавно объяснял), но пока в тестовом режиме. Пока думаю без приглашения сделать, т.е. пользователь может сразу добавить своих друзей в беседу. dialog_users id, dialog_id, user_id, confirm(можно столбец подтверждения тоже) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:36 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERя же выше дважды по пальцам объяснил разницу: беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет. Нет, я логику действий не совсем понимаю. Общий чат, он как стена — кто хочешь заходит, смотрит, пишет и отвечает другим, возможно удаляет или исправляет свои сообщения. В случае с беседой я позвал конкретных людей, что-то обсудили и договорились. Для чего выходить из нее? Висит себе и висит, хлеба не просит, в случае необходимости можно поднять и вернуться к обсуждению, иначе она сама уходит вниз и не мешается. Кстати, а приватные сообщения в чатах будут доступны? Помнится, когда лет 15 назад сидел в чатах, такой функционал уже был. Как это будет реализовано? У сообщения в комнате будет указан конкретный адресат? А модерирование будет? Удаление из комнат/бесед пользователей, удаление сообщений, баны и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:37 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот Матроскина что, есть уверенность что именно быстродействие серверной части является критичным требованием к системе? Вопрос не столько быстродействия, сколько ресурсов. Эта "серверная часть" будет грузить ввод-вывод там, где этого вообще не требуется. Займёт кучу места на диске, будет туда-сюда шуршать вставками-удалениями... Кот Матроскинни Вы ни я не знаем какие требования к системе существуют прямо сейчас. Знаем. Никаких. Если бы существовали какие-то требования, наш друг не занимался бы подобной фигнёй :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:40 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Появилось еще пару вопросов: 1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника 2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как? p.s. я не новичок в этом деле, но и опыта не так много , поэтому написал с надеждой, что более опытные пользователи предложит варианты по-лучше, дадут рекомендации, вот чего я от вас жду, как лучше сделать, как не стоит, поэтому просьба развернуто объяснить почему стоит или не стоит делать так или иначе, а не просто написать НЕ ДЕЛАЙ ТАК И спасибо тем, кто уже помог(-ает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:43 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
boottyIceJOKERя же выше дважды по пальцам объяснил разницу: беседы доступны лишь создателю и тем кого он пригласил, эти беседы никому не видны кроме как участникам беседы и беседы удаляются как только последний человек выйдет оттуда комнаты доступны всем, в него могут заходить любые пользователи, общаться, выходить, потом снова заходить и комнаты все время будут им доступны, комнаты не удаляются когда последний человек выходит оттуда, пылятся и ждут участников - кто-то зашел - радуется, не зашел - ждет. Нет, я логику действий не совсем понимаю. Общий чат, он как стена — кто хочешь заходит, смотрит, пишет и отвечает другим, возможно удаляет или исправляет свои сообщения. В случае с беседой я позвал конкретных людей, что-то обсудили и договорились. Для чего выходить из нее? Висит себе и висит, хлеба не просит, в случае необходимости можно поднять и вернуться к обсуждению, иначе она сама уходит вниз и не мешается. Кстати, а приватные сообщения в чатах будут доступны? Помнится, когда лет 15 назад сидел в чатах, такой функционал уже был. Как это будет реализовано? У сообщения в комнате будет указан конкретный адресат? А модерирование будет? Удаление из комнат/бесед пользователей, удаление сообщений, баны и т.п.? пока остановимся на комнатах и беседах (: остальное пока не важно, над этим можно будет потом подумать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:45 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerКот Матроскина что, есть уверенность что именно быстродействие серверной части является критичным требованием к системе? Вопрос не столько быстродействия, сколько ресурсов. Эта "серверная часть" будет грузить ввод-вывод там, где этого вообще не требуется. Займёт кучу места на диске, будет туда-сюда шуршать вставками-удалениями... Потребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно. Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:51 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
IceJOKERПоявилось еще пару вопросов: 1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника временной меткой в dialog_users "показывать сообщения с этого момента". IceJOKER2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как? А Вы уверены что это нужно? Вы хотите как-то выделять ответы в диалоге/комнате? скайп никак выделяет афаир. Если нужно - я бы сделал в message ссылку ID_prev_message. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 15:58 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинIceJOKERПоявилось еще пару вопросов: 1. Как хранить сообщения, чтоб при удалении с одной стороны - они не удалялись у других участников беседы, т.е. человек общается , к примеру, тет-а-тет, решил очистить чат и чат очищается только у него, а не у собеседника временной меткой в dialog_users "показывать сообщения с этого момента". IceJOKER2. И как хранить ответы пользователей? Добавить столбец to_user в messages и заполнять его если пользователь отвечает или как? А Вы уверены что это нужно? Вы хотите как-то выделять ответы в диалоге/комнате? скайп никак выделяет афаир. Если нужно - я бы сделал в message ссылку ID_prev_message. 1. О , отличный вариант, спасибо. Первое, что мне пришло в голову - это дублирование сообщений(не пинайте, не пинайте, т.к. это 1-ое, что пришло в голову). 2. Тоже думал нужно или нет....и на всякий смотрел. Лучше уж сделаю старый добрый ответ - "%username, % ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 16:05 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинПотребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно. Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;) Зато очень осмысленна разница между "нужен отдельный сервер, и диски не SATA" и "да можно впихнуть куда угодно, на загрузку почти не влияет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2015, 17:01 |
|
||
|
Проектирование БД для чата с комнатами
|
|||
|---|---|---|---|
|
#18+
softwarerКот МатроскинПотребность системы в ресурсах, не выражающаяся в ухудшении производительности - это вообще несерьезно. Разницу между ситуациями "процессор 99% времени Idle" и "процессор 98% времени Idle" - можно, конечно, характеризовать как "Ужас-ужас, система стала жрать вдвое больше ресурсов!" , но имхо не очень осмысленно ;) Зато очень осмысленна разница между "нужен отдельный сервер, и диски не SATA" и "да можно впихнуть куда угодно, на загрузку почти не влияет". Тоже, в общем-то, нет. Это осмысленно в ситуации "10 серверов в датацентре, 20 разных проектов и надо их комбинировать". А если у Вас 1 сервер и 1 проект, не потребляющий и 10% мощности сервера - для чего Вам высвобождать ресурсы? Почему-то среди IT-специалистов популярна "оптимизация ресурсов на всякий случай". Имхо это [еще] менее осмысленно, чем "гибкость и расширяемость на всякий случай" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2015, 08:50 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540500]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 296ms |

| 0 / 0 |

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