2012-04-05 58 views
0

我使用MySQL作为我的主数据库,用于一个简单的“社交网络”,我花了几周的时间。MySQL - 明智吗?

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

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

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

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

一些建议将不胜感激,

谢谢!

+3

使用选项1会带来风险,更不用说更多的代码,并且每当需要获取“连接”时解析字符串的速度都会更慢。选项2是要走的路。这就是关系数据库的工作原理。 – Brian 2012-04-05 19:12:08

+3

也许你应该阅读[数据库规范化](http://en.wikipedia.org/wiki/Database_normalisation)。 – 2012-04-05 19:12:29

+2

[在mysql的列中保存多个项目](http:// stackoverflow。com/questions/9947436 /控股多个项目在列上的MySQL) – 2012-04-05 19:13:24

回答

8

规范化结构(选项#2)非常适用于构建您描述的数据类型。使用两个整数列查询一个窄表比查询不断增长的ID列表要快得多。

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

+0

+1提及规范化 - OP应该学会这 – 2012-04-05 19:15:38

+1

也值得看看表[索引](http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html)以及它们如何使连接表闪电般快速。 – DampeS8N 2012-04-05 19:20:32

+0

好吧,它看起来似乎更明显的选择,但我对数据库的知识是相当小的。现在检出维基百科页面,谢谢。 – 2012-04-05 19:23:27

2

选项1不会结束。去一个单独的表。

+0

-----谢谢:) – 2012-04-05 19:24:48

1

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

3

第二种方法要好得多。您正在通过使用表'连接'在用户之间创建关系。这样你可以创建'n:m'关系。如果你想添加某种连接类型('爱好兴趣','朋友'),你可以很容易地将它添加到表中,但不能用字符串。

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

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

0

MySQL当然可以通过选项2提供良好的性能。更容易选择朋友并进行计算。有很多你可以做的缓存,多台服务器,负载平衡等等。

从实际的角度来说:当你接触到大量的用户时,你将会改写系统来整合你所学过的所有课程。