如何在我的数据库中实现友谊系统?

时间:2013-10-25 12:51:20

标签: mysql sql database database-design data-structures

我的数据库中有一个用户系统,我想添加添加好友的可能性。 用户必须能够:

  • 在请愿书中发送消息
  • 阻止用户
  • 为朋友用户设置别名。

所以我虽然这张表:

id_friend
id_user1
id_user2
id_user_sender
alias_user1 NULL
alias user2 NULL
status
message NULL
date_sent
date_accepted NULL

我要解释每个专栏:

  • id_friend :表格的PK。
  • id_user1 :用户表格的FK
  • id_user2 :用户表格的FK
  • id_user_sender :发送请愿书的id_user
  • alias_user1 NULL:id_user1为id_user2设置的别名(可选)
  • alias user2 NULL:由id_user2设置为id_user1的别名(可选)
  • 状态:如果0友情垂直。如果有1位朋友如果2友谊臃肿。
  • 消息 NULL:如果status = 0,则可以包含发件人发送的邮件
  • date_sent :发件人发送请愿书的日期
  • date_accepted NULL:user_requested接受友谊的日期。

然后,为了得到特定用户的所有朋友,我会这样做:

select id_user1, id_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1;

然后我会丢弃与我相同的id_users,因此结果只包含我的朋友用户。但是要获得别名我不知道。可能有更多的桌子?

我认为我的设计错了......你有任何提示或建议吗?你能举个例子吗?

如果您需要更多信息,请通知我,我会修改帖子。

2 个答案:

答案 0 :(得分:3)

我会做的一些事情:

  1. 您不需要id_user_sender。您可以假设发件人将始终存储在id_user1中,而另一个存储在id_user2
  2. 您可以使用名为blocked的布尔值替换状态。您可以通过检查date_accepted值是否为空来判断友谊是否未决
  3. 要获取$ my_user_id的朋友的别名,您可以调用此查询

    select case when id_user1=$my_user_id then alias_user2 else alias_user1 end
    from friends
    where id_user1=$my_user_id or id_user2=$my_user_id
    

答案 1 :(得分:0)

select id_user1, id_user2, alias_user2 from friends where id_user1 = $my_user_id or id_user2 = $my_user_id and status = 1;

也许这就是你要找的东西。