2016-07-22 61 views
0

我正在嘗試創建用戶註冊系統。在註冊過程中,用戶可以選擇不同的愛好。因此,我必須管理多重屬性'愛好'。 users表的字段'username'(varchar)作爲主鍵。我正在考慮創建另一個名爲「興趣愛好」的表,我如何將每個用戶連接到它的歡呼聲?有什麼建議麼?管理多值屬性SQL

謝謝

+0

關聯表或[Junction Tables](http://stackoverflow.com/a/32620163)。所以一對多或多對多。 – Drew

回答

1

你需要3張桌子。第一個建議是將您的主鍵更改爲用戶ID(建議使用整數,自動增量)而不是用戶名。名稱的功能不如鍵。

第二個表是你的userhobby表,它將用戶ID鏈接到一個愛好。我推薦hobby_id和user_id作爲你的兩個字段...這是一個映射表,如果你想讓一個用戶能夠刪除一個愛好,但你不想要的話,它真的只需要包含ID和可能的日期字段/有效字段刪除實際的數據。使用2個字段作爲主鍵user_id + hobby_id。

第三張決賽桌是Hobby,它將hobby_id映射到實際的愛好。 Hobby_id(主鍵,int和自動增量首選),然後是興趣名稱以及任何你想爲該興趣指定的信息。

有意義嗎?該設置將允許用戶具有多種興趣愛好並保留冗餘數據

+0

根據數據和目的,您不妨跳過第三個表格,並將愛好數據直接設置到用戶愛好表中。 'hobbyId | userId | hobbyName | hobbyDescription' ...雖然'choose'的意思是,必須有一個單獨的愛好表,用戶可以從中選擇,所以nvm – Philipp

+0

@Philipp - 它的工作,但你離開很多在您的系統中有多餘的數據,因爲如果多個用戶有相同的愛好,您需要反覆輸入興趣名稱和說明文字。你也會讓愛好表中的quier變得更慢......其中hobby_id = 5比hobbyname ='stackexchange'更有效率 – Twelfth