2011-10-14 29 views
9

Tôi đã có một bảng Người dùng (ID, FNAME, LNAME, INTERESTS, ...) cộng với một bảng khác để giữ tập hợp INTERESTS cụ thể mà họ có thể chọn: Phim, TV, Radio, Stage, Standup.Danh sách cửa hàng các giá trị (chẳng hạn như sở thích)

Họ có thể có nhiều hơn một sở thích, vậy làm thế nào tôi có thể lưu trữ thông tin này trong trường của người dùng INTERESTS? Hoặc phương pháp thay thế tốt nhất để đạt được điều này là gì?

+0

này đã giúp tôi: http://stackoverflow.com/questions/1009025/facebook-database-design –

Trả lời

0

giải pháp tốt nhất cho điều này là sử dụng 3 bảng (một phần ba để lưu trữ kết nối các lợi ích để useres):

user (id, name) 
interest (id, description) 
user_interest (user, interest) 

này được gọi là database normalization.

3

Đọc về database normalisation trong sách MySQL của bạn. Đó là một chủ đề quan trọng, vì vậy có lẽ một chương lớn về nó.

Nói tóm lại, bạn loại bỏ interests và kết thúc thay vì với một phần ba bảng , như:

user_id | interest_id 
--------+------------ 
    1 |  1 
    1 |  2 
    2 |  1 
    3 |  4 

này mang đến cho bạn mối quan hệ nhiều-nhiều bạn.

+0

Dưới đây là một đoạn video về bình thường hóa cơ sở dữ liệu đó đã giúp tôi: https://youtu.be/UrYLYV7WSHM –

+0

@ MattG: Hoặc đọc sách của bạn :) –

6

Đó là mối quan hệ nhiều-nhiều. Bạn lưu trữ chúng bằng cách intoducing một "tham gia bảng".

Table Users: 
----------- 
UserID PK 
Name 
... 


Table Interests 
------- 
InterestID PK 
Description. 
.... 


User_interest 
----------- 
UserID PK, FK 
InterestID PK, FK 
+1

Cột 'UserInterestID' trong' User_interest' là thừa. Bảng phải có hai cột và khóa chính của nó phải là '(UserID, InterestID)'. – Hammerite

+0

Khá đúng. Có câu trả lời sửa đổi cho phù hợp. –

+1

có vẻ hay nhưng làm cách nào để tôi truy vấn cơ sở dữ liệu để mang lại cho tôi danh sách sở thích của người dùng bằng phương pháp này? – Dan

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