我正在尝试进入一些更高级的Web开发技术,并且需要一些需要对象关系的项目。我正在使用PHP进行开发,并计划将网站完全面向对象。
像Facebook这样的网站在用户,朋友,群组,活动,喜欢,帖子,评论等方面都有关系。用户可以属于一个组或多个组,一个组可以拥有多个用户。对于事件,喜欢,帖子,评论等,这种关系也是如此。所以我的问题是如何处理和保存这些关系?
显然,有一个非常复杂的数据库保存实际内容,但在定义诸如“哪个用户属于哪些组?”之类的关系时,这是如何处理的?所有群组都会有一个唯一的标识,例如哈希或身份证号码吗?然后用户有一个“mygroups”数组或者继续添加/删除组ID,这样就可以将用户作为一个组的一部分。
我可能偏离轨道但是我的问题所带来的任何亮光都会很棒。谢谢!
答案 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小组中。