【发布时间】:2012-01-10 11:03:26
【问题描述】:
这是关于社交网站的。让 Facebook 成为我们的榜样。
在 mysql 服务器中有一个表:'posts' 用于保存所有帖子的 precord(为简单起见,不包括 cmets)。它的列是:
id, post, user_id, frnd_id_1, frnd_id_2。
id:主键,自增。
post:写在墙上的帖子(无论是登录用户的墙还是他/她的任何朋友的墙)
user_id:登录用户的id(假设为A)
friend_id_1:登录用户的好友(假设为 B)。当 A 在 B 的墙上写字时使用此字段。
friend_id_2:登录用户好友的好友(假设为C)
如果A和B之间有相应的消息对应记录在mysql表中。
假设 B 在 C 的墙上写了一些东西,然后 B 的朋友会在他们各自的墙上看到它。假设 B 有 100 个朋友。我们可以这样在表中记录:frnd_id_2将用于记录C的id;
如果frind_2的记录为'0',则消息的对应关系只有user_id和frnd_id_1,否则表示frnd_id_1已经写在frnd_id_2的墙上,frind_id_1是user_id的朋友。
到目前为止,我认为,一切都与 FACEBOOK 完全相同。
但是-
假设 B 有 100 个朋友。在这种情况下,如果 B 在 C 的墙上写字(假设所有隐私设置都对朋友的朋友开放)。如果采取上述策略,表中将有101条记录:
1) 一条记录仅表示 B 已在 C 的墙上发帖 (frnd_id_2=0) 。(我们称之为 MAIN RECORD)
2) B 的 100 位朋友的另外 100 条记录。(frnd_id_2!=0)
这就是我脑子里的样子。我可以通过插入“post”列(或将“post”列保持空白并创建另一个即“main_record_id”)而不是完整消息,而是主记录的id来改进它。
但问题是:对于单个帖子,需要执行 101 个数据库查询(在这种情况下)。还有其他方法可以提高数据库性能吗?
我使用 PHP 作为脚本语言。
【问题讨论】:
-
为什么是负面标记?有什么解释吗?
-
起初误解了这个问题。别担心。
-
你不能删除 -ve 评级吗?
-
现在我想我不想。你不会受到任何惩罚,除非有足够多的人同意我的观点,你的问题应该被关闭。别这么担心了。
标签: php mysql facebook database-design social-networking