我正在尝试使用一些更高级的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来说,真正的复杂性可能在于优化其庞大数据库的性能。