朋友请求的数据库设计

时间:2018-04-27 20:25:46

标签: sql database sqlite database-design database-trigger

所以,我正在尝试实现像Facebook Friend Request这样的东西。

让我们说用户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_requestis_accepted为1。困难的部分是如果is_accepted为1.那么我想将from_uid添加到Friends_tbl,因为现在那个人将成为用户X的朋友。我怎么能动态地做到这一点?

2.)用户X拒绝请求。那我该怎么办?我应该删除进入friend_request表的条目,以便它不会显示在用户X收件箱中,或者您有其他方式吗?

1 个答案:

答案 0 :(得分:1)

更改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>;

这样一来,如果同一个人想再次与你交朋友,你就可以知道它是否已被拒绝,甚至不会再次处理这个请求。