如何在朋友请求数据模型中处理以下情况?

时间:2015-08-13 06:09:23

标签: mysql database datamodel

对于我所在的项目,要求是用户能够发送彼此的朋友请求并接受或拒绝他们。

旁注:该项目是在Laravel上构建的。

首先,我对这些友谊的数据模型是这样的(在这个例子中省略了时间戳等):

pivot_friend_request
====================
sender_id
receiver_id
status

当然sender_idreceiver_id对用户表的id有外键约束。

这里我遇到了这个案例问题:

CASE:

  1. 用户foo邀请bar(表格行:foo-bar-pending)

  2. 同时,用户bar从未阅读过他的通知,但会搜索用户foo

  3. 用户bar邀请用户foo(表格行:bar-foo-pending)

  4. 现在我有两个表行,这两个用户已经向对方发送了两个待处理的朋友请求。

  5. 在插入bar-foo之前检查foo-bar是否已经存在的最佳方法是什么(无论请求状态如何)?

    然后我问我的项目经理做了什么,导致他问我为什么这样做。为了有一个更加面向对象的方法,他告诉我为请求和实际的友谊提供单独的表格,因为请求是请求而友谊是友谊。

    我认为他在那里提出了一个很好的观点,但它让我更加困惑。因为:

    1. 现在我必须两次处理上述案例,但我仍然没有解决方法。

    2. 另外,它让我思考如何处理请求表。是否应在接受请求后将其删除,或者是否仍有请求状态?

    3. 这样可以更有效率,因为我现在看到这样:

      • 请求由bar
      • 发送
      • 检查请求表中是否已存在foo - bar
      • 如果存在更新pendingaccepted,则使用pending创建新的LOG.info("received notification"); String resourceId=req.getHeader("X-Goog-Resource-Id"); String channelId=req.getHeader("X-Goog-Channel-Id"); LOG.info("channel id::"+channelId); LOG.info("resource id::"+resourceId); if(null == req.getHeader("X-Goog-Resource-State") || req.getHeader("X-Goog-Resource-State").equals("not_exists")){ LOG.severe("invalid resource_statestate::"+req.getHeader("X-Goog-Resource-State")); resp.setStatus(resp.SC_OK); return; } StringBuffer buf=new StringBuffer(); String line=null; BufferedReader read=req.getReader(); while((line=read.readLine()) != null){ buf.append(line); } JSONObject jsonObject =new JSONObject(buf.toString()); if(!jsonObject.has("name") || !jsonObject.has("bucket")){ LOG.severe("File or bucket name is not available:"+jsonObject.get("bucket")+"/"+jsonObject.get("name")); resp.setStatus(resp.SC_OK); return; } //required logics resp.setStatus(resp.SC_OK); 。 (如果已经接受退货'已经是朋友留言')
      • 在友谊表中创建新行
    4. 另外......如果友谊被删除怎么办?我知道有两个表我应该更新该状态?请求和实际的友谊表?

      我真的需要一些指针。

1 个答案:

答案 0 :(得分:1)

如果删除友谊,则必须同时更新请求和友谊表。例如,

  1. bar邀请foo。然后在request表中,您可以将status设置为待处理
  2. 一旦foo接受好友请求,就会向friends表添加行。
  3. 之后foo取消了bar的朋友。然后朋友表会更新。
  4. 现在bar想再次邀请foo。但是bar无法向foo发送新的好友请求,因为request表中已有记录。所以你必须在第3步或第2步更新request表。
  5. 然而,这整个场景取决于您的要求。