创建要存储的SQL好友表

时间:2014-11-23 23:54:25

标签: php mysql database database-design

我自己创建了一个网站,允许用户互相添加为朋友并对其他帖子发表评论。在调查之后,我不确定如何开始。我有帖子和用户表。

我的问题是如何将数据库与之相关联 1.检查用户A是否向用户B发送了好友请求? 2.存储一个值来表明他们是朋友?

我在发布之前浏览了这个网站,但似乎无法理解如何进行此操作。很确定我只是让它复杂化了。任何人都可以解释这个概念或它的工作原理吗?

1 个答案:

答案 0 :(得分:6)

这可以通过关系数据库完成,值得了解关系数据库如何工作,例如https://www.youtube.com/watch?v=NvrpuBAMddw

但是 - 为了给出一些指示,看起来你希望你的关系数据库允许以下功能:

  • 许多用户
  • 某些用户的一系列帖子
  • 用户之间的许多关系
  • 在确认关系之前验证关系的能力
  • 某些用户的一系列帖子
  • 一些'子帖子'对帖子的评论

1)让我们从朋友请求开始#39;部分。

这需要你拥有a)不同用户的整个负载,以及b)这些用户之间的关系负载。

您需要在2个不同的表中表示 - 所以创建一个包含以下字段的users表:

UserID, name, age, [details, password, address etc etc]

然后是一个friends表,其中包含以下字段:

friendID, userID1, userID2, [date, confirmed]

您的用户表可能如下所示:

 UserID,  name,     age,
   1      Fred      18
   2     George     24
   3     Michael    20
   4     Alice      24
   5     Sophie     20
   6     George     19

让我们说迈克尔想要成为爱丽丝和弗雷德的朋友,而爱丽丝想要和索菲成为朋友 - 你想要在你的朋友表中创建看起来像这样的记录:

 FriendID, userID1,                            userID2,
   1         3  (this refers to Michael)         4 (this refers to Alice)
   2         3  (this refers to Michael)         1 (this refers to Fred)
   3         4  (this refers to Alice)           5 (this refers to Sophie)

所以,如果你找了迈克尔的朋友,你就会做一个寻找的查询:

 every record from the friend table where userID1 = Michael's userID. 

 From the userID2 field, you'd get userID 4 and userID 1 

 By looking up those userids in the user table, you'd find more details for Alice and Fred.

您应该检查userID1 OR userid2 =您需要的用户ID,以便获得相同的结果,例如:表格略有不同:

 FriendID, userID1,                            userID2,
   1         3  (this refers to Michael)         4 (this refers to Alice)
   2         1  (this refers to Fred)            3 (this refers to Michael)
   3         4  (this refers to Alice)           5 (this refers to Sophie)

Otherwise you'd only know about Alice.. but you want to know about Fred too.

2)如果您想确认某段关系,可以添加一个“已确认”的关系。字段到朋友表 - 将其设置为二进制0 =未确认/ 1 =已确认。

当请求友谊时,您将记录添加到表中,但是当确认时,您将更新“已确认的”#39;该记录的字段为1。

让我们相应地更新我们的朋友表:

 FriendID, userID1,               userID2,     confirmed
   1         3  (Michael)         4 (Alice)      0
   2         3  (Michael)         1 (Fred)       1
   3         4  (Alice)           5 (Sophie)     1

如果你想看到所有正在等待Michael接受的朋友,你可以搜索:

  any records from the friends table where userid1 = 3
  AND confirmed = 0 ... which means it hasn't been accepted yet.

这表明爱丽丝尚未被迈克尔接受为朋友。

如果您想查看用户已请求的所有朋友,但尚未接受哪些朋友,请查找:

  any records from the friends table where userid2 = the user you're looking for
  AND confirmed = 0 ... which means it hasn't been accepted yet.

如果您想查看所有已接受的朋友,请切换确认'到1。

3)您还希望为每个用户发帖...因此您需要一个posts表格,其中包含以下字段:

postid, userid, date, content

我们已经有了你的用户表,所以让我们说Michael希望发布一些内容。 posts表可能如下所示:

postid, userid,          date               content
  1       3 (Michael)    [auto datetime]     Hi everyone   
  2       3 (Michael)    [auto datetime]     This is my second post  

您现在已经获得了迈克尔与帖子表之间的关系。如果其他用户发布了某些内容,则他们会添加另一个具有不同用户ID的行。然后,您可以从posts表中检索userid = 3的所有帖子,这是Michael的用户ID。

4)要在帖子上添加评论,您需要一个可能如下所示的评论表:

commentid, postid,          userid               content
  1           1               3 (Michael)         Michael is commenting on his own first post...
  2           2               4 (Alice)           Alice is saying something on Michael's second post