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

在MySQL中存储可变长度数组的最佳方法,mysql,database-design,relational-database,Mysql,Database Design,Relational Database,我想制作一个应用程序,允许用户将其他用户添加到个人好友列表中。在我的数据库中有一个名为“users”的表。每个用户都有一个唯一的id和一个唯一的用户名,现在每个用户都需要有一个朋友列表 我认为保存这些FriendsList的最佳选择是为每个用户创建一个包含两个列的单独表格。一列是朋友的id,一列是他们的用户名 我可以同时搜索和检索朋友的用户名和id。在缺点方面,我需要创建大量的表(数百、数千、也许数百万),每个用户一个 这会使从数据库中选择表变慢吗? 这是否会不必要地占用大量服务器空间? 有没有

我想制作一个应用程序,允许用户将其他用户添加到个人好友列表中。在我的数据库中有一个名为“users”的表。每个用户都有一个唯一的id和一个唯一的用户名,现在每个用户都需要有一个朋友列表

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

我可以同时搜索和检索朋友的用户名和id。在缺点方面,我需要创建大量的表(数百、数千、也许数百万),每个用户一个

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

你不应该这样做

而是做一些类似的事情

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

这里的朋友都是彼此的朋友

我认为你不需要走这条路。例如,如果您有一个用户表(
user\u id
user\u name
)和另一个友谊表(
Friendly\u id
user\u id1
user\u id2
),那么您将能够在一个表中存储所有友谊。唯一的id是
友谊\u id

主键是
(UserId,FriendId)
ann
(UserId)
(FriendId)
都是
用户表(id)
的外键,难道
友谊表就不能变得异常长吗?如果100万用户平均每人有20个朋友,那么你有2000万行,而不是100万行。