Проектирование базы данных по запросу друзей - PullRequest
0 голосов
/ 27 апреля 2018

Итак, я пытаюсь реализовать что-то вроде запроса на добавление в Facebook.

Допустим, пользователь X получает запрос о дружбе от пользователя Y (uid: 1001). Если пользователь X принимает запрос, то пользователь Y переходит в Friends_tbl

Итак, в этом случае лучше всего сохранить запросы в такую ​​таблицу, как friend_request где схема

CREATE TABLE friend_request (
    request_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    from_uid INTEGER,
    is_accepted INTEGER
);

Итак, допустим, первая запись в базе данных будет выглядеть как

INSERT INTO friend_request(from_uid, is_accepted) VALUES (1001, 0);

Теперь, когда пользователь X откроет свой почтовый ящик с запросом на добавление в друзья, он увидит запрос from_uid 1001.

Теперь рассмотрим два варианта:

1.) Пользователь X принимает запрос. Затем мне нужно будет обновить запрос до friend_request с is_accepted до 1. И самое сложное, если is_accepted будет 1. тогда я хочу добавить это from_uid или Friends_tbl, потому что теперь этот парень будет другом пользователя X. Как я могу сделать это динамически?

2.) Пользователь X отклонил запрос. Тогда что мне делать? Должен ли я удалить запись в таблице friend_request, чтобы она не отображалась в папке «Входящие пользователя X», или у вас есть другой способ?

1 Ответ

0 голосов
/ 27 апреля 2018

Изменить таблицу friend_request:

CREATE TABLE friend_request (
  from_uid INTEGER,
  to_uid INTEGER -- add this column
  is_accepted INTEGER
);

Для 1) вы должны сделать что-то вроде:

update friend_request 
  set is_accepted = 1
  where from_uid = <from-user-id>
    and to_uid = <to-user-id>;

insert into friends_tbl (id, friend_id) 
  values (<from-user-id>, <to-user-id>);

Для 2) вы можете пометить запрос как отклоненный (значение 2?):

update friend_request 
  set is_accepted = 2
  where from_uid = <from-user-id>
    and to_uid = <to-user-id>;

Таким образом, если тот же парень захочет снова подружиться с вами, вы можете узнать, было ли оно уже отклонено, и даже не обрабатывать запрос снова.

...