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

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

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

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

3回答

1947閲覧

データベース設計方法

ayu

総合スコア212

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2016/01/11 07:58

こんにちは。

現在、アプリ作成でデータベースの構造を考えておりましたが、とんでもないデータ量と表示方法になるので、重くなるのかなと思い、データベース設計方法の相談になります。

天気予報のサイトを作成しておりまして、下記のようなテーブルで考えております。

https://gyazo.com/2c4465f1610e3f315a72112b39d0fd6c

状況としましては、
県マスター:「prefテーブル」→pref
地方マスター:「areaテーブル」→pref_id/area
天気予報データ:「weatherテーブル」area_id/weather/centigrade_max/centigrade_min
の3個のテーブルになります。

天気予報のデータは、基本的に地方マスターから紐付ける予定なので、数万行ぐらいの中かからデータを引っ張ってくるので、こういう考え方でいいのかなと思ってしまいました。

テーブルを細分化する方がよいのか、別に問題ないのかの判断がわからなかったです。
何か指摘事項があれば、ご教授をお願いします。

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

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

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

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

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

guest

回答3

0

数万件程度なら、一般的にはそれほど大きくはありませんので、問題ないと思います。
取得するデータは今後増やすと思いますが、それでも今の数倍程度でしたら問題ないはずです。
もし数千万件以上となると、考える必要性も高くなってきますが。

あとはデータの取得方法次第だと思います。
曖昧検索(例えばlike '%市%')を1,000回繰り返すとかだと遅くなりますが、そんなことはしませんよね。
せいぜい1つの地域名を曖昧検索するくらいでしょうか。

また、100くらいの地域を取得する場合でも、インデックスを張ったidで完全一致で検索するならば、大して時間はかからないはずです。

ただし、別の問題ではありますが、データベースを動かす環境があまりに貧弱ならば、重くなる可能性もあります。

投稿2016/01/11 08:48

coba-coba

総合スコア1409

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

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

ayu

2016/01/11 13:46

回答ありがとうございます。 意外に数万件のデータなら、それほど大きくなかったのですね・・・ 自分の感覚がわかっていなかったので、大変助かりました!
guest

0

ベストアンサー

こんばんわ。
どういったデータの取り方をしたいか記述が無いのでアドバイスがしにくいのですが、
私ならこうするでしょうか。

  • 県マスタ

IDではなく一般的な県コードを利用

  • 地方マスタ

県コード、ID、地方名称
一般的な市区町村コードというものもありますが、恐らく今回のケースでは使えないと思いますので、IDでよいでしょう。

  • 天気予報データ

日付、県コード、地方ID、天気ID、摂氏max、摂氏min

  • 天気マスタ

天気ID、天気名称

日付や天気を条件にデータが取りやすい構造にしてみました。

投稿2016/01/11 08:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ayu

2016/01/11 13:44

具体的なマスター例を出していただき、ありがとうございます。 この発想はなかったので、ベストアンサーにさせていただきました。
guest

0

提示された情報だけでは、何とも言えませんが、
適切なインデックス、データ型で設計されていれば、問題はないと思います。

天気予報データ に日付関連のフィールドがないのが気になるところ…

投稿2016/01/11 08:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ayu

2016/01/11 13:45

回答ありがとうございます。 >天気予報データ に日付関連のフィールドがないのが気になるところ… こちらはrailsで作成しているので、created_at/updated_atに関してはあります! 記載漏れしており、申し訳ございませんでした。
退会済みユーザー

退会済みユーザー

2016/01/11 14:22 編集

ああ、自分の言っている日付関連というのは、予報日時のことです。予報って1日に数回の予報が出るので。 unishakoooo さんのいうマスタは結構大変だと思いますよ。プログラマの頭なら当然マスタ化を考えるんですが、天気の種別って300くらいあるので… 下手にマスタ化しない方がいいかも。気象システムに携わった時に、実際マスタを見てびっくりしたので。
ayu

2016/01/12 13:14

今、悩んでいるのはアイコンですね。 文字を使うとややこしいので、アイコンで表示しようと考えています。 しかし、抜けるデータが文字なので、どのようにして変換しようかなって考えております。 >自分の言っている日付関連というのは、予報日時のことです。予報って1日に数回の予報が出るので。 天気予報に基づいたアプリですが、1日の何回の予報よりも、アバウトな予報だけで大丈夫だと思うので、まずはアバウトに行こうと思っております。 >プログラマの頭なら当然マスタ化を考えるんですが、天気の種別って300くらいあるので… 下手にマスタ化しない方がいいかも。気象システムに携わった時に、実際マスタを見てびっくりしたので。 そこまで複雑にしようとは思っておりませんw 最初は楽さで考えております。 色々とご教授ありがとうございます!
退会済みユーザー

退会済みユーザー

2016/01/12 13:35

システム面はまあ、どうとでもなりますが、天気予報は法律上の制限もありますので、そこは気をつけてください。専門家ではないので、ご自身で調べていただくしかありませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問