像Facebook这样的网站是如何处理对象关系的


How do websites like Facebook handle object relationships?

我正在尝试使用一些更高级的web开发技术,并考虑了一些需要对象关系的项目。我正在用PHP进行开发,并计划使网站完全面向对象。

像Facebook这样的网站有用户、朋友、群组、事件、点赞、帖子、评论等之间的关系。一个用户可以属于一个或多个组,一个组可以有多个用户。这种关系同样适用于事件、点赞、帖子、评论等。所以我的问题是如何处理和保存这些关系?

显然,有一个非常复杂的数据库可以保存实际内容,但当定义诸如"哪个用户属于哪个组?"之类的关系时,如何处理?是否所有组都有一个唯一的标识,如哈希或id号?然后,用户有一个"mygroups"数组或类似的数组,它会继续添加/删除组ID,从而使用户成为组的一部分。

我可能偏离了轨道,但任何关于我的问题的线索都会很好。谢谢

让我们举一个例子。用户和组。

这是一艘"人与人"的关系船。这意味着一个用户可以在0或多个组中,一个组可以有一个或多个用户

因此将有3个表

用户表

USER_ID (INT) Primary Key
USER_NAME V(VARCHAR)

GROUP表

GROUP_ID (INT) Primary Key
GROUP_NAME (INT) 

USER_GROUP

USER_GROUP_ID (INT) Primary Key
GROUP_ID (INT) Foriegn Key (to GROUP Table, GROUP_ID Column)
USER_ID (INT) Foriegn Key (to USERTable, USER_ID Column)

一些样本数据将类似

用户

 USER_ID              USER_NAME
 --------------------------------
 1                    Scott
 2                    Jon
 3                    Mike

集团

 GROUP_ID              GROUP_NAME
 --------------------------------
 161                    Bloggers
 162                    Geeks

USER_GROUP

 USER_GROUP_ID   USER_ID              GROUP_ID
 ----------------------------------------------
   1                1                    161
   2                2                    161
   3                2                    162
   4                3                    161

这意味着

1) 斯科特;迈克在博客群里。

2) 斯科特在极客队。

更熟悉这个主题的人可能会对它有更多的了解,但是的,你是对的:每个组、用户等都有一个唯一的ID。用户和组之间的关系以及朋友关系都存在于关系数据库的表中。

我想说,数据库可能没有你想象的那么复杂。如果用户有userid,那么友谊可以在友谊表中表示,例如:

Friendship table
----------------
  UserID | FriendID
  User_A | Friend_1
  User_A | Friend_2
  etc...

集团成员:

 Groupmembership table
  GroupID | UserID
   GroupA | User1
   GroupA | User2
   etc...

我并不是说应该这样做,但这是一个可能的解决方案:使用常规关系数据库。

对于Facebook来说,真正的复杂性可能在于优化其庞大数据库的性能。