2

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

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

显然有一个非常复杂的数据库来保存实际内容,但是在定义诸如“哪个用户属于哪个组?”之类的关系时,这是如何处理的?是否所有组都具有唯一标识,例如哈希或 ID 号?然后用户有一个“mygroups”数组或这样的数组,它继续添加/删除组 ID,这些 ID 使用户成为组的一部分。

我可能偏离了轨道,但对我的问题有任何启发都会很棒。谢谢!

4

2 回答 2

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,真正的复杂性可能在于优化其庞大数据库的性能。

于 2012-08-06T20:55:58.980 回答
1

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

这是一个多对多的关系。这意味着一个用户可以在 0 个或多个组中,一个组可以有一个或多个用户

所以会有3张桌子

用户表

USER_ID (INT) Primary Key
USER_NAME V(VARCHAR)

组表

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 和 Mike 出现在 Bloggers 组中。

2) Scott 出席了 Geeks 小组。

于 2012-08-06T20:57:03.447 回答