2011-10-14 88 views
9

我有一張用戶表(ID,FNAME,LNAME,INTERESTS,...)加上另一張表來保存他們可以選擇的特定利益集合:電影,電視,廣播,舞臺,站立。商店的價值清單(如興趣)

他們可以有一個以上的興趣,所以如何將這些信息存儲在用戶權益的領域?或者什麼是實現這一目標的最佳替代方法?

+0

幫我:http://stackoverflow.com/questions/1009025/facebook-database-design –

回答

0

該最佳的解決方案是使用3個表(第三個用於存儲的利益useres連接):

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

這被稱爲database normalization

3

閱讀關於database normalisation在您的MySQL書籍。這是一個重要的話題,所以關於它可能有很大的篇幅。

總之,你刪除interests並用第三表而不是結束,如:

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

這樣,您能夠多到多的關係。

+0

這裏是數據庫規範化這讓我的視頻:https://youtu.be/UrYLYV7WSHM –

+0

@ MattG:或者閱讀你的書:) –

6

這是一個多對多的關係。您可以通過輸入「連接表」來存儲這些數據。

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


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


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

User_interest中的UserInterestID列是多餘的。該表應該只有兩列,其主鍵應該是'(UserID,InterestID)'。 – Hammerite

+0

非常正確。相應地修改了答案。 –

+1

聽起來不錯,但如何查詢數據庫使用這種方法給我一個用戶的興趣列表? – Dan