🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

3012閲覧

単語と画像の投稿、もしくは画像の要求と提供する場合のER図について

Harluz

総合スコア19

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2021/01/23 00:04

編集2021/01/24 09:54

ruby on rails でポートフォリオ(webアプリ)を作成中です。

初めてERを作成しました。
他サイトや本を参考にしましたが、似通った機能を見つけることができなかったため、質問いたします。

アプリ概要

英単語学習者とイラストや写真が趣味の方(以下、提供者)がマッチするもの
学習者は単語と画像を関連づけてイメージで覚えることができる
提供者は、日々のテーマ探しを解消することができる

機能

学習者は、一つの単語を投稿し、その単語の意味に合う画像を要求する
提供者は、学習者からの要求に応じて画像を提供する
全ユーザーは、単語と画像を一緒に投稿することもできる
単語と画像がセットになったものを一覧で確認することができる(インスタのようなイメージ)

ER図作成について

これら機能を実装するためER図を作成してみました。

ER図

赤線
ユーザーは単語を投稿し画像を要求する
注文する際にwordテーブルに単語を登録する
その登録したidをもって単語を表示する

緑線
ユーザーは注文に対して画像を提供する
提供する際にimageテーブルに画像を登録する
注文したユーザーを特定して回答する

青線
ユーザーは投稿する単語と画像を
単語と画像を各テーブルに登録して、関連付けて投稿する

オレンジ線
いいね機能の実装のため

疑問点・不明点

・このER図にて機能を実装できるのか
・テーブル分割の妥当性
・ER図の書き方

の上記3点についてご指摘いただければ幸いです。

正解というものはないのかもしれませんが、自分の作成したER図について自信が持てません。
ロジック漏れもある気がしてなりません。

お手数をおかけしますが、ご回答のほどよろしくお願いします。

【第1回目修正】
修正ER図

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

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

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

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

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

m.ts10806

2021/01/23 00:09

>・このER図にて機能を実装できるのか ポートフォリオなんですよね。 まず、やってみては? やってみて難があれば戻って軌道修正すればいいと思います
Harluz

2021/01/23 02:38

完璧主義になっていました。 おっしゃる通り、このER図で作成してみます。
guest

回答1

0

ベストアンサー

ポートフォリオ⇒修行中 ということですと、、、
このERで出来るだろうと思いますが、機能に比べやや複雑かと思います。

OrderとWordが1:1なら別立てせずにOrderの中に項目wordを入れれば機能するのでは?
ResponseとImageも同じく
なのですが、こちらはちょっと考えたほうがよいかも。
一つの画像を復数のOrderの回答に使い回しできると思うのです。
その場合

  1. 同じ画像を都度UPしてもらって、システム上は別のものとして扱う
  2. 復数のResponseでImageを使い回す(1:多)
  3. 復数のOrderにResponseを使い回す

どう考えるかで決まります。(1 が作るには一番楽なのでポートフォリオならそれかな)

なお、class名と項目名が同じだと人間がbugる可能性が出てくるのでできれば避けたほうが良いです。
wordというのが Wordのインスタンスなのか、インスタンスの値なのか、文脈から判断するという余分な脳作業が必要になります。

投稿2021/01/24 05:58

winterboum

総合スコア23567

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

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

Harluz

2021/01/24 09:36 編集

おっしゃる通り×3です。 まさに、orderとwordの関係性について、どちらを親として考えるのかでつまづいておりました。 画像の複数投稿についても、同じ画像ばかり使用されてはユーザーも幻滅してしまいます。また、単語のマッチしない場合の対策も考えなければなりません。(アプリ側で) class名と項目名について、私が速攻でbugりましたので、修正しておりました。 postに単語と画像、orderに単語、responceに画像を包括したとしても、そのテーブルのidからデータは取得できそう(私の考えが間違えていなければ)なので、その方向で検討してみます。 また、orderとresponseの間にrelationshipsが必要とも考えましたが、responseですでにorder_idと紐づくため、このidから単語と画像のセットを取得できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問