MySQL - 这是明智的吗?

时间:2012-04-05 19:09:21

标签: php mysql html

我使用MySQL作为我的主要数据库,用于简单的“社交网络”,我花了几周时间。

与所有社交网络一样,用户需要与朋友建立联系才能使其成为社交网络。

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

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

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

非常感谢一些建议,

谢谢!

5 个答案:

答案 0 :(得分:8)

规范化结构(选项#2)非常适合用于构造您描述的数据类型。查询具有两个整数列的窄表比通过不断增长的ID列表进行分割要高效得多。

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

答案 1 :(得分:3)

第二种方法要好得多。您可以使用表格'来创建用户之间的关系。通过这种方式,您可以创建' n:m'关系。如果您想添加某种连接类型('喜欢兴趣'朋友'),您可以轻松地将其添加到表格中,但不能添加到字符串中。

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

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

答案 2 :(得分:2)

选项1不会很好结束。单独使用表格。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

MySQL可以通过选项2提供良好的性能。选择朋友和进行计算更容易。您可以使用缓存,多个服务器,负载平衡以及所有这些来做很多事情。

现实地说:当你接触到大量用户时,无论如何你都会重写系统,以便整合你在学习过程中学到的所有课程。