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

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

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

496閲覧

好きなゲームのキャラクター技検索アプリを作りたい!!

hikaru-udon

総合スコア6

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2021/01/21 12:10

###前提・問題点

 勉強としてrailsで以下のような機能を持ったアプリを考えているのですが、DB設計の時点で良い構想が浮かびません。
途中までは自分なりに設計しているのですが、かれこれ1週間ほど手詰まりです。。
どなたかご教授いただけないでしょうか?

実装機能

『アクションゲームのキャラクター技検索アプリ』
・キャラクターを選ぶ
・キャラクターの技が一覧表示される
・技一覧画面からさらに技を選択するとその技の詳細が表示される
・文字、数値入力で技を検索できる

##実装予定のバックログ

・characterモデル及びテーブルを作成しキャラクター(キャラ名などの基礎)データを保存
・charactersコントローラーを作成し、indexビューを作成(=キャラクター選択画面)

##解決したいこと

 技データに検索機能をつけたいので、moveモデル及びテーブルを作成し、movesコントローラーにindexとshowとsearchアクションを実装する予定です。(モデル・テーブル・コントローラー名は仮です)

しかし、一つのmovesテーブルに全てのキャラクターの技データを保存してしまうのは管理が難しくなると同時に可読性が下がると考えています。
(例えばゲームのアップデートがきて各キャラクターに新技が追加された場合など)

そこで、各キャラクターごとにモデルを作り、それぞれのテーブルで各キャラクターの技データを管理しようと考えているのですが、この場合、キャラクターが選択された時に、それに対応する各キャラクターのmovesテーブルの技データを取得することは可能でしょうか?

またこの方法でできない場合、もしくは別の方法で行った方が良い場合、どのようなDB設計が考えられるでしょうか?

##解決するために行ったアクション
・railsガイドでテーブルの管理方法、データ取得の方法を調べたが、私では関連するものを見つけることができませんでした。
・類似するアプリはあるものの、おそらくデータで管理せず、全てビューだけで作成している。
・検索機能は各テーブルを結合させ、searchアクションにてwhereメソッド用いることはわかった。

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

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

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

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

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

guest

回答1

0

ベストアンサー

キャラクターや技ごとにモデル・テーブル・コントローラーを作ることはおすすめしません。基本的には共通化すべきです。

しかし、一つのmovesテーブルに全てのキャラクターの技データを保存してしまうのは管理が難しくなると同時に可読性が下がると考えています。
(例えばゲームのアップデートがきて各キャラクターに新技が追加された場合など)

具体的にどのように管理が難しくなりますか?

もしキャラクターごとにテーブルを 30個に分けたりすると 30テーブルそれぞれの
SQL を書く必要が出てくるかもしれませんが、そちらの方が面倒ではないでしょうか。

しかしながら例えば、
・あるゲームはキャラクターごとに技が決まっている。
・別のゲームはどのキャラクターでも自由に技を選択できる。
・さらに別のゲームはキャラクターがペアになることで出せる技が変わる。
という違いがあり、それを一元管理したいということなら、少なくともキャラクターと技の紐付けについては別々に作ったほうがよいのかもしれません。

まずは Excel などでキャラクターと技を表にしてみて、どこかで破綻するかしないかを確認してみてはどうでしょうか。

投稿2021/01/21 12:40

68user

総合スコア2022

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

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

hikaru-udon

2021/01/23 05:27 編集

回答ありがとうございます!ご協力くださり、嬉しいです! 確かに同じカラムを持ったテーブルを個別にたくさん作るのは効率がよくないですね。 すみません、管理が難しいというのは言葉の誤りがありました。 ただ、各キャラクターの新しい技データを追加した際に、最新データがテーブルの一番下に来てしまい、見にくいかなと思いました。 同じテーブル内でもidを設定するなどしてキャラクターごとにデータ(レコード)を並べ替えたり取得したりすることはできるのでしょうか? また、破綻というのはどういう意味で破綻なのでしょうか? できれば具体的教えていただければとても嬉しいです。 知識不足で申し訳ございません。。
68user

2021/01/24 03:38

> 同じテーブル内でもidを設定するなどしてキャラクターごとにデータ(レコード)を並べ替えたり取得したりすることはできるのでしょうか? そういうことです。登録日時順にソートできるようにしたり、「特定のキャラクターのみ抽出」という感じで絞り込んだりして管理しやすくします。 具体的には SQL で where 句や order by 句を使います。 > また、破綻というのはどういう意味で破綻なのでしょうか? 例えば、技テーブルのカラムを  ・技ID  ・技名  ・キャラクターID と決めて、Excel の表を埋めていったところ、「そういえば別のキャラクターも全く同じ技を使えるがどうかけばいいのか? 技ごとに キャラクターID は 1つか書けない…」となったら破綻の香りです。 Excel表を書く段階でこれはまずいとなるなら、コーディングしていてもそうなるわけで、設計のまずさに早めに気づくには Excel 表埋めてみてはどうですかという提案です。 Excel 表を埋めて全く問題が出てこないなら、その設計は問題ないのでしょう。
hikaru-udon

2021/01/24 04:58

なるほど、わかりました! 提案してくださった通り、一度Excelで表を作り、カラムを洗い出すところからやってみます! ご回答くださり、ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問