質問: 現状のテーブル構成に自信がありません。 テーブル設計初学者です。何卒、ご助言のほどよろしくお願い致します。 ### 現在のテーブル構成とアソシエーション usersテーブル ※便宜上、他のカラムは省いております。 | id | username | section_id | | --- | --- | --- | | 1 | suzuki | 1 | | 2 | sasaki | 2 | | 3 | sato | 5 | sectionsテーブル | section_id | name | | --- | --- | | 1 | セクション1 | | 2 | セクション2 | | 3 | セクション3 | | 4 | セクション4 | | 5 | セクション5 | ``` #user.rb(モデル) has_one :section, primary_key: "section_id", foreign_key: 'section_id' ``` ``` #section.rb(モデル) class Section < ApplicationRecord belongs_to :user end ``` ### 変更予定のテーブル構成 usersテーブル | id | username | | --- | --- | | 1 | suzuki | | 2 | sasaki | | 3 | sato | user_sectionsテーブル | user_id | section_id | | --- | --- | | 1 | 1 | | 2 | 2 | | 3 | 5 | sectionsテーブル | section_id | name | | --- | --- | | 1 | セクション1 | | 2 | セクション2 | | 3 | セクション3 | | 4 | セクション4 | | 5 | セクション5 | ``` #user.rb(モデル) has_one :user_section ``` ``` #user_sections.rb(モデル) belongs_to :user belongs_to :section ``` ``` #section.rb(モデル) has_one :user_section ``` 関連付けするテーブルを1つ増やし、userテーブルをスッキリさせようかと。 変更後のアソシエーションは正しいかわかりませんが、、 後者の方がテーブル設計上は望ましいでしょうか?
回答: user_sectionsテーブルを増やすことの煩雑さよりusersテーブルのスッキリさを取るのであればいいと思います!トレードオフですね。 後者の場合は、userとsectionの関係がone_to_one以外(ユーザー1に対しセクション多数等)でも対応できるという点がメリットだと思います。またその際はusers_sectionなのか、user_sectionsなのか、users_sectionsなのかでアソシエーションが変わってくるので気をつけて下さいね(参考) 常にone_to_oneであれば要らないかなと