【问题标题】:Database Designing for Friend Request好友请求的数据库设计
【发布时间】:2018-10-08 17:41:30
【问题描述】:

所以,我正在尝试实现 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 打开他的好友请求收件箱时,他将看到来自_uid 1001 的请求。

现在,考虑两个选项:

1.) 用户 X 接受请求。然后我需要将查询更新到 friend_requestis_accepted 到 1 。困难的部分是如果is_accepted 是1。那么我想将from_uid 添加到Friends_tbl,因为现在那个人将是用户X 的朋友。我怎样才能动态地做到这一点?

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

【问题讨论】:

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


    【解决方案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>;
    

    这样如果同一个人想再次加你好友,你可以查明是否已经被拒绝,甚至不再处理请求。

    【讨论】:

    • 如果你有一个我假设你有的用户表,请注意 topicstarter @Adshead。你最好可以使用外键。对于 from_uid 和 to_uid 列,例如 FOREIGN KEY(from_uid) REFERENCES user(id)。关于外键的文档sqlite.org/foreignkeys.html