2
1

More than 3 years have passed since last update.

【開発日記】薬価検索アプリno.4 〜データベース設計〜

Last updated at Posted at 2019-10-29

前回の内容はこちら。
【開発日記】薬価検索アプリno.3 〜設計・画面の設計〜

開発背景などはこちら
【開発日記】薬価検索アプリno.1 〜開発概要→企画〜

現在の進捗状況

1.必要な機能の洗い出し
2.必要な画面設計
3.データベース設計 ⬅︎今ココ
4.Railsでアプリケーションの雛形作成
5.大きな機能から順に実装
6.テストコードを書いて動作を担保する
7.リファクタリングして整理する
8.デプロイ

DB設計

どうやって設計するのか、
なぜ、この段階で設計する必要があるのか、
ER図はどうやって書くのか、
これらは他の記事に譲りますね。

大まかな手順

1.管理するデータ(エンティティ)の決定
2.データ属性を決定
3.エンティティ同士の関係性を決定(リレーション)
4.実際にテーブルとして定義する

いざ、設計!

と、気合い入れてみましたが、
今回のアプリではDBを検索するだけなので、
薬価収載されている薬剤のデータさえあればOKでした。

今後の拡張機能として、お気に入り薬剤を登録できたり、過去の検索履歴が見れたり、というのはまだ先なので、今回は以下のようなテーブルを作成しようと思います。

medicationsテーブル

今回使用するデータは公に公開されているデータを使用します。

こちらにある「医薬品マスター」を使用します。
診療報酬情報提供サービス
こちらからCSVファイルがダウンロードできます。
また、CSVのままだとなんのこっちゃわからないので、説明を見てみましょう。
データ内容に関する説明

テーブルの構造を書き出すと以下のようになりました。
使わないよね?ってカラムもありますが、
このデータは、少なくとも2年に一回は薬価改定がありますし、常に新しい医薬品も増え続けます。
逆に、販売がなくなる医薬品もあります。
その時に簡単にアップデートできるように、手をつけない形で運用してみようかと思います。
のちのアップデートも考慮して設計していきたいところです。

書き出してみるとこのようになりました。

column type options 備考
変更区分 change_category integer
マスター種別 master_type string Y:固定
医薬品コード(医薬品名、規格名)pharmaceutical_code integer
漢字有効桁数 kanji_significant_digits integer
漢字名称 name string index
カナ有効桁数 kana_significant_digits integer
カナ名称 kana_name string
単位コード unit_code integer
単位漢字有効桁数 unit_significant_digits integer
単位漢字名称 unit_name string index
金額種別 price_type integer
新又は現金額 price integer
予備 spare integer 未使用(すべて0)
麻薬・毒薬・覚せい剤原料・向精神薬 n_p_s_p_drugs integer
神経破壊剤 nerve_destroyer integer
生物学的製剤 biologics integer
後発品 generic integer index
予備 spare_2 integer 未使用(全て0)
歯科特定薬剤 dental_drugs integer
造影(補助)剤 contrast_agent integer
注射容量 injection_volume integer
収載方式等識別 listing_type integer
商品名等関連product_name_relations integer
旧金額種別 old_price_type integer
旧金額 old_price integer
漢字名称変更区分 name_change_category integer
カナ名称変更区分 kana_name_change_category integer
剤形 dosage_form integer
予備 spare_3 integer 未使用(null)
変更年月日 changed_date integer
廃止年月日 abolition_date integer
薬価基準コード standard_code string
公表順序番号 order_number integer
経過措置年月日又は商品名医薬品コード使用期限 expiration_date integer
基本漢字名称 standard_name string

まとめ・所感

今回は、DB設計を行いました。
今想定してる機能としてはDBを検索するだけ。なので、DBは1つで事足ります。
しかし、今後、お気に入りの登録や、検索履歴、セット処方での金額表示など、ユーザー登録が必要な機能も考えているので、
その時はER図も使って書いてみようと思います。

次回、【開発日記】薬価検索アプリno.5 〜Railsでアプリケーションの雛形作成、mySQLエラー、GitHubの設定まで〜に続きます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1