質問: ### 前提・実現したいこと railsで家計簿アプリを作成しています。 テーブル設計で以下問題が発生しているため、相談させてください。 1子モデル(budgets)が複数の親モデル(monthlies・categories)を持ってしまう。 (テーブル設計のアンチパターンになってしまう。) 2budgetsのインスタンスをmonthlies・categoriesの両方に関連づけて保存する方法がわからない。 1を解消すれば2も解消すると考えています。 ### 発生している問題・エラーメッセージ ``` 現在作成している家計簿アプリの中で、毎月の予算を作成する際、科目別にできるよう実装中です。 例えば、1月の予算として、食費は1万円、交際費は2万円と設定するイメージです。 そのために現在設定しているテーブルは以下の3つです。 monthlies(月予算テーブル) カラム ・month(1月、2月) categories(支出の科目テーブル) カラム ・name(食費・交際費) budgets(予算テーブル) カラム ・price(支出金額) ・category_id(どの科目の支出なのか把握するため) ・monthries_id(どの月の予算なのか把握するため) budgetsにcategory_idカラムを持たせることで、金額と科目を関連づけ、 それをmonthliesのインスタンスにすれば良いと考えました。 fields_forを使用して、monthliesのインスタンスを作成する際にbudgetsも併せて保存できるようにしましたが、 そこからcategory_idを指定する方法がわかりません。 調べた結果、上記のようにbudgetsテーブルが複数の親モデルを持ってしまうのは、 アンチパターンなので避けるべきということがわかりました。どのように解消すべきかわかりません。 どなたか、教えていただけると幸いです。 ``` ### 試したこと そもそも、テーブルが3つあることが誤りなのでは?と思い、monthliesとbudgetsを結合することを考えましたが、 うまくいきませんでした。 (月毎の予算表示する際、金額とカテゴリーの組み合わせをインスタンスとして持つテーブルがないとうまく表示できないため。) ### 補足情報(FW/ツールのバージョンなど) 参考にした記事 複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ
回答: 現状の設計でもデータベース的には問題ないです。 リンク先(参考にした記事)の場合とは異なりますので、アンチパターンではありません。 リンク先は子テーブルのID(**主キー**)が複数の親に結び付く関係。 質問は、テーブルの**外部キー**で複数のテーブルと関連付ける設定。 データベースの設計では常用するものです。 ただ、monthlies が月の1カラムしかないのなら、予算テーブル に月フィールドを持たせてもいいかと思います。