Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to store arrays of variable length in MySQL

I want to make an app that allows users to add other users to a personal friendslist. In my database there is a table called 'users'. Every user has a unique id and a unique username, now every user needs to be able to have a list of friends.

I think the best option to save these friendslists is to create a seperate table with two colums, for every user. One column for the friends' id's and one for their usernames.

I can search and retrieve the friends username and id at the same time. On the downside I will need to create a hugh number of tables (hundreds, thousands, perhaps millions), one for each user.

Will this make selecting a table from the database slow? Will this unnecessarily cost a hugh amount of space on the server? Is there a better way to save a friendslist for every user?

like image 805
M.Smit Avatar asked Mar 06 '12 17:03

M.Smit


People also ask

How do I store an array in MySQL?

The easiest way store array type data in MySQL is to use the JSON data type. The JSON data type was first added in MySQL version 5.7. 8, and you can use the type for storing JSON arrays and objects.

Can MySQL hold arrays?

MySQL doesn't have an array data type. This is a fundamental problem in architectures where storing denormalized rows is a requirement, for example, where MySQL is (also) used for data warehousing.

Can you store an array in a SQL database?

Conclusion. As you can see, SQL Server does not include arrays. But we can use table variables, temporary tables or the STRING_SPLIT function. However, the STRING_SPLIT function is new and can be used only on SQL Server 2016 or later versions.


2 Answers

You should not do that.

Instead do something like

UserTable
* Id
* UserName

FriendsTable
* UserId
* FriendId

You may need to read a little about relation databases.

This way a user can be friend to a lot of people. Consider for this example

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

Here the people from Friends is all friends to eachother

like image 61
AnAmuser Avatar answered Sep 18 '22 22:09

AnAmuser


I don't think you need to go down that route. If you have a table of users (user_id, user_name) for example and another table of friendships (friendship_id, user_id1, user_id2) then you will be able to store all friendships in one table. The unique id being friendship_id.

like image 45
user1067800 Avatar answered Sep 20 '22 22:09

user1067800