2012-03-06 32 views
5

Tôi muốn tạo một ứng dụng cho phép người dùng thêm người dùng khác vào danh sách bạn bè cá nhân. Trong cơ sở dữ liệu của tôi có một bảng gọi là 'người dùng'. Mỗi người dùng có một id duy nhất và một tên người dùng duy nhất, bây giờ mọi người dùng đều cần có danh sách bạn bè.Cách tốt nhất để lưu trữ các mảng có chiều dài biến đổi trong MySQL

Tôi nghĩ rằng tùy chọn tốt nhất để lưu các danh sách bạn bè này là tạo một bảng riêng biệt với hai colums, cho mọi người dùng. Một cột cho id của bạn bè và một cho tên người dùng của họ.

Tôi có thể tìm kiếm và truy xuất tên người dùng và id bạn bè cùng một lúc. Mặt khác, tôi sẽ cần phải tạo ra một số lượng lớn các bảng (hàng trăm, hàng ngàn, có thể là hàng triệu), một cho mỗi người dùng.

Điều này có giúp chọn bảng từ cơ sở dữ liệu chậm không? Điều này không cần thiết sẽ tốn một lượng không gian khổng lồ trên máy chủ? Có cách nào tốt hơn để lưu danh sách bạn bè cho mọi người dùng không?

Trả lời

12

Bạn không nên làm điều đó.

Thay vì làm một cái gì đó giống như

UserTable 
* Id 
* UserName 

FriendsTable 
* UserId 
* FriendId 

Bạn có thể cần phải đọc một chút về cơ sở dữ liệu quan hệ.

Bằng cách này, người dùng có thể kết bạn với nhiều người. Hãy xem xét ví dụ này

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 

Ở đây, mọi người từ bạn bè là tất cả bạn bè eachother

+1

Khoá chính sẽ là '(UserId, FriendId)' ann cả hai '(UserId)' và '(FriendId)' sẽ là Khóa ngoài cho 'UserTable (Id)' –

2

Tôi không nghĩ rằng bạn cần phải đi xuống đường đó. Nếu bạn có bảng người dùng (ví dụ: user_id, user_name) và một bảng tình bạn khác (friendship_id, user_id1, user_id2) thì bạn sẽ có thể lưu trữ tất cả tình bạn trong một bảng. Id duy nhất là friendship_id.

+0

Điều này có ý nghĩa. –

Các vấn đề liên quan