0

我正在使用 MySQL 作为我花费数周时间的简单“社交网络”的主数据库。

与所有社交网络一样,用户需要与他们的朋友建立联系才能使其具有社交性。

我的理论是在我的user数据库中添加另一列并将其命名为连接。在那里,我将存储一串用逗号分隔的用户 ID,然后在需要时将它们拆分。

我的另一个理论是创建一个全新的表connections并使用两列“user_1”和“user_2”。然后,当搜索朋友时,数据库将执行选择以查找他们的 id 等等。

但问题是:什么是最有效的?如果我要支持大量用户,使用选项 2 是否有风险?

一些建议将不胜感激,

谢谢!

4

5 回答 5

8

规范化结构(选项 #2)对于构建您描述的数据类型非常可取。查询具有两个整数列的窄表比拆分不断增长的 ID 列表要高效得多。

我建议阅读不同的规范化形式:http ://en.wikipedia.org/wiki/Database_normalization (参见“规范化形式”)

于 2012-04-05T19:12:25.390 回答
3

第二种方法要好得多。您正在使用表“连接”创建用户之间的关系。这样您就可以创建“n:m”关系。如果您想添加某种连接类型(“love interest”、“friend”),您可以轻松地将其添加到表格中,但不能添加到字符串中。

还有另一个好处:您不必考虑用户拥有的连接数。你会用什么来连接?一个varchar?一个text?你真的想每次都解析这个烂摊子吗?您如何确保不会添加两次连接?

tldr;:使用表格来显示关系。

于 2012-04-05T19:12:42.883 回答
2

选项 1 不会有好的结局。去一张单独的桌子。

于 2012-04-05T19:12:06.190 回答
1

毫无疑问,调用一个单独的表connections会更容易。在一列中有多个值违背了数据库的目的,你能想象用选项 1 搜索 user1 的所有朋友吗?

于 2012-04-05T19:12:16.853 回答
0

MySQL 当然可以通过选项 2 提供良好的性能。选择朋友和进行计算更容易。您可以使用缓存、多台服务器、负载平衡等做很多事情。

现实地说:当您接触到大量用户时,无论如何您都将重写系统以整合您在此过程中学到的所有经验教训。

于 2012-04-05T19:13:24.623 回答