|
|
|
Проектирование БД обмена сообщениями как в 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, 15:22 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
RTFM GROUP BY HAVING COUNT(*) = 2 Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2016, 16:10 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
Пока додумался только до этого: | user ----------------------- | id | user_chat_rooms --------------------------------- в user_chat_rooms что будем хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2016, 16:17 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Промежуточная модель между users и chat_rooms, реализация many to many. Это позволяет относить одного пользователя к разным chat_rooms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2016, 17:30 |
|
||
|
Проектирование БД обмена сообщениями как в 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, 17:40 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
dimanlinчёт не понимаю (( А ты having убери и мозгом подумай над результатом своего запроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2016, 18:00 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
dimanlinMasterZiv, Промежуточная модель между users и chat_rooms, реализация many to many. Это позволяет относить одного пользователя к разным chat_rooms. ну, я И намекаю, что неправильно, должно быть минимум 2 таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 20:37 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
хотя нет, видимо все ок, просто нарисовано у тебя по-дурацки... я сразу не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2016, 20:40 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 13:51 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
Нахлобуч, В чем смысл внешних ключей в Message, ссылающихся на Thread и User, а не на ThrеadParticipant? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2016, 17:15 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Там же описано. Message --< Thread -- для ведения нескольких дискуссий (те же комнаты), User --< Message -- для авторства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:16 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
НахлобучКот Матроскин, Там же описано. Message --< Thread -- для ведения нескольких дискуссий (те же комнаты), User --< Message -- для авторства. Еще раз - почему ключ ссылается отдельно на user и отдельно на thread, вместо того чтобы ссылаться сразу на thread_participant? В результате в базу можно внести сообщение в дискуссию от пользователя, не являющегося участником дискуссии, т.е. создать коллизию. Очевидно, что ключ на thread_participant точно так же позволил бы отслеживать авторство и ведение нескольких дискуссий, но помешал бы внести некорректные данные вроде описанного выше случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 21:19 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Участник может запросто покинуть дискуссию. Он от этого не перестанет быть автором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 10:39 |
|
||
|
Проектирование БД обмена сообщениями как в VK
|
|||
|---|---|---|---|
|
#18+
НахлобучУчастник может запросто покинуть дискуссию. Он от этого не перестанет быть автором. 1. По ссылке вообще ничего не сказано про удаление из thread_participant, поэтому покинуть дискуссию участник не может ;) 2. Если таки взяться обрабатывать кейс с выходом из дискуссии (хотя непонятно зачем), то обеспечивать это надо флагами в thread_participant, а не удалениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 13:38 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=13&tid=1540243]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 143ms |

| 0 / 0 |

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