SO の最初の投稿なので、ガイドラインに正しく従っていない場合はお詫び申し上げます。
私は Rails でオンライン リーグ管理アプリケーションを設計していますが、データベース設計でいくつかの問題に遭遇しました。これは、今持っているものを先に進めて、後で機能しないことがわかるよりも、今すぐ整理したいものです。
現在、私は次のモデルを持っています:
class League < ActiveRecord::Base
has_many :teams
has_many :players
end
class Team < ActiveRecord::Base
belongs_to :league
has_many :players
end
class Player < ActiveRecord::Base
belongs_to :league
belongs_to :team
end
リーグは、プレイヤーのチームで構成することも、チームを持たない個々のプレイヤーのみで構成することもできます。私は現在、リーグがチーム向けかプレイヤー向けかを識別する League_type 属性を Leagues テーブルに持っています。私の最初の質問は、これがこの状況を処理する良い方法であるかどうかです。
これが問題であると思われる理由の 1 つは、マッチを作成しようとするときです。これは、プレイヤーまたはチームで構成されるためです。当初は、home_id 属性と away_id 属性を備えた Match モデルを作成し、リーグの種類に応じて player_ids または team_ids のいずれかを設定することを考えていましたが、それは私にとって良い設計とは思えません。ホームとアウェイのフィールドをポリモーフィックにすることを検討しましたが、おそらくそれが最善の方法でしょうか? 例えば。
class Match < ActiveRecord::Base
belongs_to :home_matchable, polymoprhic: true
belongs_to :away_matchable, polymoprhic: true
end
そして、「has_many :home_matches, as: home_matchable」と「has_many :away_matches, as: away_matchable」をチームとプレイヤーに追加します。
現時点で私が持っているビューとコントローラーの数が限られているだけで、リーグがチーム向けかプレイヤー向けかを定期的に確認する必要があるようです。少し醜い感じがする私のコードのステートメント。特に、たとえば「ダブルス」タイプを追加したいと決めた場合は特に、「if 'teams' then else if 'players' then else」などになります。
申し訳ありませんが、これは私が予想していたよりもずっと長くなってしまいました。