2012-03-06 14 views
5

Desidero creare un'app che consenta agli utenti di aggiungere altri utenti a una propria lista di amici. Nel mio database c'è una tabella chiamata 'utenti'. Ogni utente ha un ID univoco e un nome utente univoco, ora ogni utente deve essere in grado di avere un elenco di amici.Il modo migliore per archiviare array di lunghezza variabile in MySQL

Penso che l'opzione migliore per salvare questi elenchi di amici è creare un tavolo separato con due colonne, per ogni utente. Una colonna per gli id ​​degli amici e uno per i loro nomi utente.

Posso cercare e recuperare il nome utente e l'ID amici contemporaneamente. Sul lato negativo avrò bisogno di creare un numero enorme di tabelle (centinaia, migliaia, forse milioni), una per ogni utente.

Ciò renderà la selezione di una tabella dal database lenta? Ciò comporterà inutilmente una notevole quantità di spazio sul server? C'è un modo migliore per salvare una lista di amici per ogni utente?

risposta

12

Non dovresti farlo.

Invece fare qualcosa di simile

UserTable 
* Id 
* UserName 

FriendsTable 
* UserId 
* FriendId 

Potrebbe essere necessario leggere un po 'su basi di dati relazionali.

In questo modo un utente può essere amico di molte persone. Si consideri per questo esempio

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 

Qui le persone di Amici è tutti gli amici a vicenda

+1

La chiave primaria sarebbe '(UserId, FriendId)' ann sia '(UserId)' che '(FriendId)' sarebbe Foreign Keys a 'UserTable (Id)' –

2

non credo che dovete imboccare questa strada. Se si dispone di una tabella di utenti (user_id, user_name) per esempio e un'altra tabella di amicizie (friendship_id, user_id1, user_id2), sarà possibile memorizzare tutte le amicizie in un'unica tabella. L'ID univoco è friendship_id.

+0

Questo ha senso. –

Problemi correlati