前提・実現したいこと
初投稿・プログラミングを初めて2ヶ月のものです。
DB設計において、中間テーブルを使うパターンとFormオブジェクトを使うパターンのどちらがプログラミングでは正しいのか、お詳しい方に助言をいただけたらと思います。
レシピサイトを作成しています。
- menusテーブル ・・・ レシピの名前、作り方
- foodstuffsテーブル ・・・ 材料、分量、何人前か
初期段階ではこちらのようなテーブル設計で実装していました。
しかし、一つのForm画面から、二つのテーブルに保存したいので、
Formオブジェクトを使えば良いのでは?と考え、こちらの形に変更いたしました。
CREATE TABLE
usersテーブル
Column | Type | Options |
---|---|---|
nickname | string | null: false |
string | null: false, unique: true | |
encrypted_password | string | null: false |
Association
- has_many :menus
- has_many :comments
menusテーブル
Column | Type | Options |
---|---|---|
title | string | null: false |
recipe | text | null: false |
hour_id | integer | null: false |
price_id | integer | null: false |
user | references | null: false, foreign_key: true |
Association
- belongs_to :user
- has_one :foodstuff
- has_many :menu_tags
- has_many :tags, through: menu_tags
- has_many :comments
commentsテーブル
Column | Type | Options |
---|---|---|
comment | string | |
user | references | null: false, foreign_key: true |
menu | references | null: false, foreign_key: true |
Association
- belongs_to :user
- belongs_to :menu
foodstuffsテーブル
Column | Type | Options |
---|---|---|
foodstuff_name | string | null: false |
quantity | string | null: false |
serving | integer | null: false |
menu | references | null: false, foreign_key: true |
Association
- belongs_to :menu
- has_many :menus, through: foodstuff_menus
- has_many :foodstuff_menus
foodstuff_menusテーブル
Column | Type | Options |
---|---|---|
foodstuff | references | null: false, foreign_key: true |
menu | references | null: false, foreign_key: true |
Association
- belongs_to :foodstuff
- belongs_to :menu
menu_tag_relationsテーブル
Column | Type | Options |
---|---|---|
menu | references | null: false, foreign_key: true |
tag | references | null: false, foreign_key: true |
Association
- belongs_to :menu
- belongs_to :tag
tagsテーブル
Column | Type | Options |
---|---|---|
name | string | null: false |
Association
- has_many :menu_tags
- has_many :tags, through: menu_tags
考えたこと・調べたこと
-
そもそも中間テーブルを使うときは多対多の時とのことですが、menusテーブルに対して、foodstuffs(材料)のパターンは一つしかないので中間テーブルを設けることすらおかしいのではと思いましたが。。
-
他の質問者の方で、同様にレシピサイトの作成をしている方がいらっしゃいましたが、回答者の方は中間テーブルを推奨していました。
-
中間テーブルを通過してFormオブジェクトへの保存をする手法も見つかりましたが、まず中間テーブルに必要性があるのかが整理しきれずに止まってしまいました。
根本が間違えていてトンチンカンな質問をしていたら申し訳ございません。
補足情報
Ruby 6.0.0
railsを使用しての実装です。
DBはMySQLを使用しています。
追記
中間テーブルを使わない場合はこちらの実装を考えましたが、ご意見いただきたいです。
他のテーブルは上記と同じもので考えていたので省略させていただきました。
menusテーブル
Column | Type | Options |
---|---|---|
title | string | null: false |
recipe | text | null: false |
hour_id | integer | null: false |
price_id | integer | null: false |
user | references | null: false, foreign_key: true |
Association
- belongs_to :user
- has_one :foodstuff
foodstuffsテーブル
Column | Type | Options |
---|---|---|
foodstuff_name | string | null: false |
quantity | string | null: false |
serving | integer | null: false |
menu | references | null: false, foreign_key: true |
Association
- belongs_to :menu
回答2件
あなたの回答
tips
プレビュー