在MySQL中存储可变长度数组的最佳方法

时间:2012-03-06 17:20:00

标签: mysql database-design relational-database

我想创建一个允许用户将其他用户添加到个人朋友列表的应用。在我的数据库中有一个名为'users'的表。每个用户都有唯一的ID和唯一的用户名,现在每个用户都需要能够拥有一个朋友列表。

我认为保存这些好友列表的最佳选择是为每个用户创建一个包含两个列的单独表。一列为朋友的id,另一列为他们的用户名。

我可以同时搜索和检索朋友的用户名和ID。在缺点方面,我需要为每个用户创建一个数量级的表(数百,数千,可能是数百万)。

这会使从数据库中选择一个表变慢吗? 这会不必要地耗费服务器上的空间吗? 是否有更好的方法为每个用户保存好友列表?

2 个答案:

答案 0 :(得分:14)

你不应该这样做。

而是做类似

的事情
UserTable
* Id
* UserName

FriendsTable
* UserId
* FriendId

您可能需要阅读一些关于关系数据库的内容。

这样一来,用户就可以成为很多人的朋友。考虑这个例子

UserTable
1, Joey
2, Rachel
3, Chandler
4, Ross
5, Phoebe
6, Monica

FriendTable
1, 2
1, 3
1, 4
1, 5
1, 6
2, 3
2, 4
2, 5
2, 6
3, 4
3, 5
3, 6
4, 5
4, 6
5, 6

来自朋友的人都是彼此的朋友

答案 1 :(得分:2)

我认为你不需要走那条路。如果您有一个用户表(user_iduser_name)和另一个友情表(friendship_iduser_id1user_id2),那么您将成为能够将所有友谊存储在一个表中。唯一ID为friendship_id