powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Друзья / Приглашения и обмен сообщениями -- бд игрового сервера
1 сообщений из 1, страница 1 из 1
Друзья / Приглашения и обмен сообщениями -- бд игрового сервера
    #35501442
Konstantin~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 вопроса.

А) приглашения в дружбу / обен сообщениями
есть таблица user где храняться данные игроков. Вопрос в том как организовать систему приглашений в дружбу. Дополнительное требование состоит в том что дружба всегда в обе стороны, т.е. если user1 зафрендил user2 то в списке друзей user2 user1 появляется автоматически. Еще одно требование это чтобы при запросе, подтверждении и разрыве дружбы передавалось сообщение написанное юзером, вроде "user2 this is user1, could we be friends?" (запрос на дружбу) или "user2, I hate u know" (отфрендить)

Б) общая система обмена сообщениями
система обмена сообщениями, вроде как личные сообщения на фоуме. требования тут такие: чтоб сообщения не стирались: user1 послал сообщение msg1 для user2, при этом msg1 записался в user1.Sent и user2.Inbox. И чтобы были broadcast сообщения для всех/группы пользователей.

все это куски базы игрового сервера.


по Б) что то такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE msg (
    msg_id serial,     -- pkey
    msg_fromuid int, -- fkey to table user, id of the user who sent the msg
    msg_rcptuid int,  -- fkey to table user, id of the recipient
    mgs_folder int,    -- fkey or enum (inbox,sent,deleted,etc)
    msg_status,        -- fkey or enum (read,deleted,etc)
    msg_flag,           -- fkey or enum (some flags, what ever it may be)
    ...  
    msg_timestamp
);

при посылке сообщения думаю создавать две записи ... Inbox, Sent, etc для юзера грубо говоря view с выборкой по user_id и folder. Что смущает так это то что наверно надо создавать отдельную таблицу для broadcast msg, иначе придется каждый раз создавать N=count(users) записей.

по А)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- table invitations
CREATE TABLE inv (
   inv_fromuid int not null,  -- fkey to user, id of the invitation sender 
   inv_touid     int not null,  -- fkey to user, id of the recipient
   inv_type      int not null,  -- fkey or enum (invitation,termination,etc)
   inv_subject varchar,       -- custom msg: subject 
   inv_body     varchar,      -- custom msg: body
   ...
   inv_expire timestamp
)  pkey (inv_fromuid, inv_touid)

-- table friends
CREATE friends (
friends_userid int,     -- fkey to user 
friends_friendid int,   -- fkey to user
...
) pkey (friends_userid, friends_friendid)

Запрос на дружбу создает запись в inv, при подтверждении запроса запись переносится во friends, запись из inv при этом стирается. Смущает несколько моментов,
первое: учитывая требование "взаимной дружбы" придется писать две записи во friends.

И второе: система сообщений не работает при разрыве дружбы. По идее если дружба разрывается то запись из friends должна удалятся сразу. Не очень ясно когда удалять/создавать запись в inv.

Третье: далее потербуется система приглашений в группы, исключения из групп. Не хотелось бы создавать отдельную таблицу для приглашений в группу, хочется как-то обьеденить.

Вообшем любые мысли и коментарии приветстуются.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Друзья / Приглашения и обмен сообщениями -- бд игрового сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]