Как мне спроектировать мою базу данных PosgreSQL для размещения приватного, группового и публичного чата? - PullRequest
0 голосов
/ 26 сентября 2018

Я создаю небольшое приложение для обмена сообщениями, в котором пользователь может отправлять сообщения по адресу:

  • Общий чат - (Всем и каждому)
  • Частный чат - (Между 2 пользователями)
  • Групповой чат - (3+ пользователя)

Я все еще плохо знаком с дизайном базы данных и хотел бы получить представление о том, как проектировать мою базу данных.

Что такое хороший дизайн / схема, которая позволила бы мне иметь эти возможности?

Сейчас у меня есть схема, которая выглядит следующим образом:

CREATE TABLE ChatRooms (
id serial PRIMARY KEY,
);


CREATE TABLE ChatMessages (
id serial PRIMARY KEY,
roomID FOREIGN KEY NOT NULL,
message VARCHAR(100),
senderID FOREIGN KEY NOT NULL, 
time TIMESTAMP
);

А такжеТаблица пользователей с идентификатором пользователя, конечно.Нужно ли мне больше столов?

1 Ответ

0 голосов
/ 27 сентября 2018

Проекты, которые я бы предложил:

**ChatRooms**        **ChatMessages**    **ChatUsers**
room_id              id                  user_id
serial               room_id             room_id
type (0/1/2)         sender_id           added_on (timestamp)
users (user count)   text
                     time (timestamp)

Теперь этот «тип» будет указывать погоду, если номер общий (0), групповой (1) или частный (2).Всякий раз, когда пользователь присоединяется к чату, его информация будет добавляться в таблицу ChatUsers с указанным идентификатором чата, и при выходе из этого чата эта строка будет удаляться из таблицы ChatUsers.Преимущество таблицы ChatUsers состоит в том, что когда вы будете отображать общее количество пользователей в комнате, вам не нужно будет подсчитывать все строки из таблицы ChatUsers, вместо этого вы просто выберете значение из таблицы ChatRooms столбца 'users', которое равно строкамопределенной комнаты в таблице ChatUsers, вам нужно будет увеличивать столбец пользователей комнаты при каждом добавлении строки в таблицу ChatUsers, а также уменьшать при удалении строки с идентификатором комнаты. Вы также можете отображать информацию о пользователях в комнатевыбирая значения столбца 'user_id' из строк, которые имеют идентификатор конкретной комнаты в столбце 'room_id', а затем извлекает информацию о следующих пользователях с этими идентификаторами из таблицы пользователей.

Надеюсь, это то, чтоВы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...