質問: 初歩的な質問で、タイトル通りです。Railsでアプリを作っています。 例えば、Usersテーブルに「好きなスポーツ」というカラムを作り、その値は、サッカー、野球、バスケ、バレー、ラグビーの5つの中から任意の数だけ選べるとします。(値の登録時は、チェックボックスを使うことを想定しています。) **ーーUsersテーブルーー** | id | 好きなスポーツ | | --- | --- | | 1 | バスケ | | 2 | サッカー、バスケ | | 3 | 野球、バレー、ラグビー | のように、一つのカラムに複数の値を「、」区切りで入れるのは望ましくなく、正規化しないといけないことはわかります。 これを正規化すると、SportsテーブルとUser_sportsテーブルを作り、 **ーーSportsテーブルーー** | id | name | | --- | --- | | 1 | サッカー | | 2 | 野球 | | 3 | バスケ | | 4 | バレー | | 5 | ラグビー | **ーーUser_sportsテーブルーー** | id | user_id | sport_id | | --- | --- | --- | | 1 | 1 | 3 | | 2 | 2 | 1 | | 3 | 2 | 3 | | 4 | 3 | 2 | | 5 | 3 | 4 | | 6 | 3 | 5 | のようにすれば関係性は保たれています。しかし、たかがUserの一カラムのためにテーブルを2つも作るのは冗長な気がするのです。 あとは、Usersテーブルに好きなスポーツ1、好きなスポーツ2、・・・のようにカラムを複数作る方法もありますが、nullを入れることになりよろしくないと思います。 わざわざテーブルを2つ作ることがこの場合ふさわしいでしょうか?また、これら以外の方法があればご教授ください。
回答: > > これを正規化すると、SportsテーブルとUser_sportsテーブルを作り > > > が正しいです。たとえば「バスケ」が好きな人をSELECTするSQLを正規化したテーブルと正規化ていないテーブルで記述して比べると良く理解できるかと。