2012-03-06 10 views
5

Quiero hacer una aplicación que permita a los usuarios agregar otros usuarios a una lista personal de amigos. En mi base de datos hay una tabla llamada 'usuarios'. Cada usuario tiene una identificación única y un nombre de usuario único, ahora cada usuario necesita tener una lista de amigos.La mejor manera de almacenar matrices de longitud variable en MySQL

Creo que la mejor opción para guardar estas listas de amigos es crear una tabla separada con dos columnas, para cada usuario. Una columna para los id de los amigos y otra para sus nombres de usuario.

Puedo buscar y recuperar el nombre de usuario y el id de amigos al mismo tiempo. A la baja, tendré que crear un gran número de tablas (cientos, miles, quizás millones), una para cada usuario.

¿Esto hará que la selección de una tabla de la base de datos sea lenta? ¿Esto costará innecesariamente una gran cantidad de espacio en el servidor? ¿Existe alguna forma mejor de guardar una lista de amigos para cada usuario?

Respuesta

12

No deberías hacer eso.

En vez de hacer algo como

UserTable 
* Id 
* UserName 

FriendsTable 
* UserId 
* FriendId 

Es posible que tenga que leer un poco acerca de las bases de datos de relación.

De esta manera, un usuario puede ser amigo de muchas personas. Considere este ejemplo

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 

Aquí la gente de Amigos es a todos los amigos entre si

+1

La clave principal sería '(UserId, FriendId)' ann tanto '(UserId)' como '(FriendId)' serían claves externas a 'UserTable (Id)' –

2

no creo que necesita para seguir ese camino. Si tiene una tabla de usuarios (user_id, user_name) por ejemplo y otra tabla de amistades (friendship_id, user_id1, user_id2), entonces podrá almacenar todas las amistades en una misma tabla. La identificación única es friendship_id.

+0

Esto tiene sentido. –

Cuestiones relacionadas