2015-02-05 195 views
0

我正在Symfony和Doctrine 2下开发,希望你的建议关于如何构建我的数据库(mysql)的一种社交网络平台共享信息(文章)。考虑到大量越来越多的文章,这种情况是: - 作者可以从他的成员列表中分享尽可能多的特定用户的文章
- 任何接收者也可以决定将文章转发给他自己的成员列表中的特定用户 - 为作者或接收器的部件的选择可以是对于每个物品不同(目标取决于该物品的可能的兴趣的)对多关系 指数数据库关系

A /条和用户表具有许多连接我是首先考虑到这种架构,但行数可能相当庞大。考虑到用户可能拥有1000个连接(成员),如果其中一些成员决定将文章转发给其他成员,那么只有一篇文章的行数可能达到100万行。

B/Article文章列表与长文本列关系为 然后我考虑用文本列来填充文章数据库,我将用接收者的用户ID填充......但是这个列可能再次获得一百万个ID ...。当用户连接时,我将不得不请求在长文本列中输入Select * Where UserIn ...。

解决方案B可能适合?你将如何处理这种情况?

回答

0

如果我正确理解你,你有一个文章表和用户表。您想要将文章链接到用户。

简单的事情就是给他们一个链接表链接:

TABLE `Link` (
    `Article` , 
    `User` 
) 

这是你提出了什么。没有更有效的方法。

+0

嗨。谢谢您的回答。这是我的第一个想法;但由于可以转达给其他人的用户数量,它可以成倍地达到大量的行数......可以说,一个用户有200个朋友,他们每个人都将200个朋友转达给他们的朋友。我将拥有: 选项A: article-id | user_id a | 1 a | ... a | 200 b | x c | y a | 210 a | ... a | 40 000(200x200) 选项B: article-id | user_ids(在长文本列中) a | 1,2,3,4 .... 40 000 b | x,x' c | y – Blue 2015-02-05 18:33:10

+0

最后,你仍然需要将信息存储在某个地方。没有指数。谁引用文章并不重要,只有一篇文章和一个用户链接到。没有重复。如果你想保持与“中继”的关系,那将需要更多。如果需要,也许只需添加一个引用列。 – Misunderstood 2015-02-05 18:50:28