2011-03-17 23 views
3

自分のフォームにチェックボックスのリストがあり、いずれかを選択することも、すべてを選択することもできます。
ユーザーは興味のあるスポーツの種類を選択すると考えます。MySql:データベースに複数の選択肢のデータを格納

私はこのユーザーchoiseを保存するのに最適なデータベース構造が必要です。それで、将来私はこのすべてのデータを得ることができます。

私は、各(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 

それともuser_sports表はどのスポーツを好きどのユーザーが含まれ3つのテーブル

users 
userID sportName 

sports 
sportID sportName 

user_sports 
userID sportID 

を持つことができますを持つことができます。

どの方法を選択するかは、データの関係と予想される複製の程度によって異なります。

ユーザーが選択したスポーツのみを保存している場合は、2番目のスポーツを選択します。それはスポーツ名の重複を防ぎますが、1人のスポーツを1人のユーザーにしか許可しません。ユーザーが複数のスポーツを選択できるようにするには、3番目のオプションを使用します。

関連する問題