
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
11.12.2016, 15:22
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Привет! Нужно с проектировать БД(Postgres 9.5.5) для обмена сообщениями между пользователями. Принцип работы как в vc.com Пока додумался только до этого: | user ----------------------- | id | user_chat_rooms --------------------------------- | user_id(integer) указывает на users | chat_room_id(integer) указывает на chat_room_id | chat_rooms -------------------------- | name(string) | messages ----------------------------- | message (text) | char_room_id (integer) указывает на user_chat_rooms | sender_id (integer) указывает на users | receiver_id (integer) указывает на users Проблема с которой столкнулся, не могу написать проверку запрос, что бы понять, что между 2-мя пользователями есть chat_room и там всего 2 участника. Вот что имею: select * from user_chat_rooms where user_id in (1,2); id | user_id | chat_room_id | created_at | updated_at ----+---------+--------------+----------------------------+---------------------------- 3 | 1 | 1 | 2016-12-10 09:58:40.168882 | 2016-12-10 09:58:40.168882 4 | 2 | 1 | 2016-12-10 09:58:46.231259 | 2016-12-10 09:58:46.231259 6 | 2 | 3 | 2016-12-10 09:59:01.382443 | 2016-12-10 09:59:01.382443 Тут выдача говорит что пользователь с id 1 и 2 действительно имеют общую комнату для сообщений. Так же пользователь 2 имеет ещё одну комнату для общений. Как мне получить однозначный ответ: 1. Что эти 2 пользователя имеют общую комнату для общений 2. Что в этой комнате только 2 этих пользователя и больше никого нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.12.2016, 16:10
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
RTFM GROUP BY HAVING COUNT(*) = 2 Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.12.2016, 16:17
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Пока додумался только до этого: | user ----------------------- | id | user_chat_rooms --------------------------------- в user_chat_rooms что будем хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.12.2016, 17:30
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
MasterZiv, Промежуточная модель между users и chat_rooms, реализация many to many. Это позволяет относить одного пользователя к разным chat_rooms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.12.2016, 17:40
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Dimitry Sibiryakov, Дмитрий, чёт не понимаю (( select user_id, chat_room_id from user_chat_rooms where user_id in (1,2) group by user_id, chat_room_id having count(*) = 2; user_id | chat_room_id ---------+-------------- (0 rows) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.12.2016, 18:00
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
dimanlinчёт не понимаю (( А ты having убери и мозгом подумай над результатом своего запроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.12.2016, 20:37
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
dimanlinMasterZiv, Промежуточная модель между users и chat_rooms, реализация many to many. Это позволяет относить одного пользователя к разным chat_rooms. ну, я И намекаю, что неправильно, должно быть минимум 2 таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.12.2016, 20:40
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
хотя нет, видимо все ок, просто нарисовано у тебя по-дурацки... я сразу не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.12.2016, 13:51
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.12.2016, 17:15
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Нахлобуч, В чем смысл внешних ключей в Message, ссылающихся на Thread и User, а не на ThrеadParticipant? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.12.2016, 10:16
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Кот Матроскин, Там же описано. Message --< Thread -- для ведения нескольких дискуссий (те же комнаты), User --< Message -- для авторства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.12.2016, 21:19
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
НахлобучКот Матроскин, Там же описано. Message --< Thread -- для ведения нескольких дискуссий (те же комнаты), User --< Message -- для авторства. Еще раз - почему ключ ссылается отдельно на user и отдельно на thread, вместо того чтобы ссылаться сразу на thread_participant? В результате в базу можно внести сообщение в дискуссию от пользователя, не являющегося участником дискуссии, т.е. создать коллизию. Очевидно, что ключ на thread_participant точно так же позволил бы отслеживать авторство и ведение нескольких дискуссий, но помешал бы внести некорректные данные вроде описанного выше случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.12.2016, 10:39
|
|||
|---|---|---|---|
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
Кот Матроскин, Участник может запросто покинуть дискуссию. Он от этого не перестанет быть автором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.12.2016, 13:38
|
|||
|---|---|---|---|
|
|||
Проектирование БД обмена сообщениями как в VK |
|||
|
#18+
НахлобучУчастник может запросто покинуть дискуссию. Он от этого не перестанет быть автором. 1. По ссылке вообще ничего не сказано про удаление из thread_participant, поэтому покинуть дискуссию участник не может ;) 2. Если таки взяться обрабатывать кейс с выходом из дискуссии (хотя непонятно зачем), то обеспечивать это надо флагами в thread_participant, а не удалениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=32&tablet=1&tid=1540243]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 489ms |

| 0 / 0 |

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