2011-03-17 118 views
3

我在表單中有一個複選框列表,用戶可以選擇其中的任何一個,或者只是全部。
認爲用戶選擇他感興趣的運動類型。MySql:將多項選擇數據存儲在數據庫中

我需要最好的數據庫結構來存儲這個用戶選擇。所以,將來我可以得到所有這些數據。

我想,我只是可以將每個(userID,sport)choise存儲爲數據庫表中的新行。但這讓我感到困惑,因爲只有少數用戶,桌子的展開速度會更快。

任何想法,兄弟?

回答

3

你可以設置一個多到多臺如:

FavoriteSports 
------ 
id user_id sport_id 

1 5  20 

如果您有:

User 
------- 
id name 

5 Mike 

Sport 
----- 
id name 

20 Football 

這是有道理的,因爲用戶有許多體育和運動有許多用戶。

3

決定如何做到這一點叫做正常化。

有多種方法可以做到這一點,這取決於您希望數據如何標準化。

最簡單的方法就是你所描述的。

userID userName sport 

或者你可以有2個表

users 
userID userName sportID 

sports 
sportID sport 

或者你可以有3個表

users 
userID sportName 

sports 
sportID sportName 

user_sports 
userID sportID 

user_sports表包含用戶喜歡哪個體育項目。

您選擇的方法取決於您的數據關係和您期望的重複數量。

如果您只存儲用戶選擇的運動,我會選擇第二個。這可以防止體育名稱重複,但只允許每個用戶進行一項運動。如果您想讓用戶選擇多項運動,請使用第三個選項。