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

时间:2012-08-06 20:44:53

标签: php web-applications

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

像Facebook这样的网站在用户,朋友,群组,活动,喜欢,帖子,评论等方面都有关系。用户可以属于一个组或多个组,一个组可以拥有多个用户。对于事件,喜欢,帖子,评论等,这种关系也是如此。所以我的问题是如何处理和保存这些关系?

显然,有一个非常复杂的数据库保存实际内容,但在定义诸如“哪个用户属于哪些组?”之类的关系时,这是如何处理的?所有群组都会有一个唯一的标识,例如哈希或身份证号码吗?然后用户有一个“mygroups”数组或者继续添加/删除组ID,这样就可以将用户作为一个组的一部分。

我可能偏离轨道但是我的问题所带来的任何亮光都会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

团体会员资格:

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

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

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

答案 1 :(得分:1)

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

许多关系船都是很多。这意味着一个用户可以在0个以上的组中,而一个组可以有一个或多个用户

所以会有3个表

USER表

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)Scott,Jon&amp;迈克出现在Bloggers小组中。

2)Scott出现在Geeks小组中。