質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

2回答

1878閲覧

Railsのテーブル設計についての質問です。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/05/15 04:00

編集2022/01/12 10:55

テーブルを分けるべきか否か。

Railsのテーブル設計についてご助言を頂けませんか。
例えば、Airbnbの「部屋紹介」には「写真を表示」があります。
(建物画像の左下です。)

イメージ説明

これをクリックしますと、

イメージ説明

このように多くの画像(35枚)を閲覧できるようになっています。

そこで質問なのですが、「部屋紹介」をEventモデル(DB:eventsテーブル)としたとき、
これらの35枚の画像は、

(1) eventsテーブルに全部まとめて格納するか
(2) 1:多関連付けで別テーブル(例:imagesテーブル)に格納するか

通常どのような設計になるのでしょうか。やはり一長一短でしょうか。
お手数をおかけしますが、ご助言頂けると幸いです。

追伸・再度のお願い。

とても参考になりました!ご回答ありがとうございます。もう1つ質問をさせてください。

例えば、新たな選択肢(3)

・画像枚数は各Event一律(35枚)とし、
・has_one: image_list という関連付け、「画像1/画像2/...画像35」 みたくカラム生成
・各カラム画像パスを格納してく。

これは、(2)has_many: images と比較時、どう思われますでしょうか。
(もしかしたら、has_oneも悪くないのでは?と初心者ながら思ったのですが...。)
やはりテーブルの全カラムを読込する関係、個別画像の抽出時、デメリットがあるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moke

2017/05/15 09:49 編集

追伸・再度のお願い。は別に立てるべきです。 乗りかかった船なので今回は特別に答えますが。 絶対に35枚で多くも少なくもない 画像の順番をならべかえることは絶対にない 必ず、35枚の写真は同時に使いそのうちの一枚や一部のみを使うことは決してない と言う特殊条件下なら、kinako0909の方法もありだと思います。
guest

回答2

0

なぜ部屋紹介がeventモデルなのかはわかりませんが
(1) eventsテーブルに全部まとめて格納するか
(2) 1:多関連付けで別テーブル(例:imagesテーブル)に格納するか
(1)は百害あって一利なしです。特にモデル生成時に全てのcolumnを読み込むRailsですとさらに、それが顕著です。
通常、(2)にして、さらに(2)にはpathのみ(せいぜいサムネイル)を保存して、画像の保存はOSに任せるようにして運用します。
#追伸・再度のお願い。への回答
追伸・再度のお願い。は別に立てるべきです。
乗りかかった船なので今回は特別に答えますが。
0. 絶対に35枚で多くも少なくもない
0. 画像の順番をならべかえることは絶対にない
0. 必ず、35枚の写真は同時に使いそのうちの一枚や一部のみを使うことは決してない
と言う特殊条件下なら、kinako0909の方法もありだと思います。

投稿2017/05/15 04:08

編集2017/05/15 09:51
moke

総合スコア2241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通常は、(2)の「画像テーブルを別に用意する」方法が取られます。

35枚も1テーブルに入れるとなれば、全レコードに「画像1」「画像2」…「画像35」などという大量のカラムが必要となって、無駄だらけになります。

投稿2017/05/15 04:06

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問