質問: UserとClubのモデルがあったとして、その関連を表すMembershipモデルのようなものは必要ありますか? Userにbelong_to_club_ids Clubにhas_user_ids のような配列をidを格納する配列を持たせるでは機能的に不十分ですか? 不十分であればどのように不十分であるか教えていただきたいです。 よろしくお願いします。
回答: バックエンドがSqliteやMySQLのようなRDBMSであれば、**持たせるべき**です。 というのも、UserとClubで、属するデータを二重管理していると、片方を変更したときにもう片方の変更を怠るようなバグを出してしまったときに、どちらが正しいデータだったかわからなくなる、というデータの損失を伴う不整合となるからです。 このように、「1対多」のデータを列方向に開いて、複数の「1対1」データの関連として表現し直すことを、データベースの**正規化**の1つとして、「第1正規化」といいます。 Railsの場合、`has_many through:`の形を使えば、このような中間テーブルを入れた多対多関係も簡単に定義できます(なお、Rails wayでは、中間テーブルは`club_users`のような名前が適当です)。