2012-03-06 16 views
5

Kullanıcıların kişisel bir arkadaş listesine başka kullanıcılar eklemesine izin veren bir uygulama yapmak istiyorum. Veritabanımda 'kullanıcılar' adlı bir tablo var. Her kullanıcının kendine özgü bir kimliği ve benzersiz bir kullanıcı adı vardır, şimdi her kullanıcının bir arkadaş listesine sahip olması gerekir. MySQL içinde değişken uzunluktaki dizileri saklamanın en iyi yolu

Bunları friendslists kurtarmak için en iyi seçenek her kullanıcı için, iki yay²labilir ile ayrı bir tablo oluşturmak için olduğunu düşünüyorum. Arkadaşların kimliği ve kullanıcı adları için bir sütun.

Arama ve aynı zamanda arkadaş kullanıcı adı ve kimliği alabilir. Aşağı yönde, her kullanıcı için bir tane masa (yüzlerce, binlerce, belki de milyonlarca) oluşturmak zorundayım.

Bu, veritabanından bir tablo seçmeyi yavaşlatacak mı? Bu, gereksiz yere sunucuda gereksiz yere mal olacak mı? Her kullanıcı için bir arkadaş listesini kaydetmenin daha iyi bir yolu var mı?

cevap

12

Bunu yapmamalısınız.

yerine Sen ilişki veritabanları hakkında biraz okumak gerekebilir

UserTable 
* Id 
* UserName 

FriendsTable 
* UserId 
* FriendId 

böyle bir şey yapmak.

Bu şekilde, bir kullanıcı bir çok insanın arkadaşı olabilir. Bu örnekte İşte

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 

Arkadaş insanlar için düşünün Bunu yol gitmek gerekir sanmıyorum birbirinden

+1

Birincil Anahtar '(UserId, FriendId)' '(UserId)' 've' (FriendId) '' '' '' '' '' '' '' '' '' '' 'dırılmıs' 'KullanıcıTablo (Id)' ' –

2

tüm dosttur. Örneğin bir kullanıcı tablonuz (user_id, user_name) ve başka bir arkadaşlık tablosu (friendship_id, user_id1, user_id2) varsa, tüm arkadaşlarınızı tek bir tabloda saklayabilirsiniz. Benzersiz kimlik friendship_id.

+0

'' için Yabancı Anahtarlar olacaktır. –

İlgili konular