- ベストアンサー
Accessで昔の処方箋をデータベース化する方法
- Accessを使用して昔の処方箋をデータベースにする方法について説明します。薬の材料を整理し、薬材料テーブルを作成します。
- 薬の材料は薬草や動物の一部で、イチジクの実やアカシアの葉などが含まれます。材料は主か部分のどちらかに分類されます。
- 処方箋テーブルと薬材料テーブルをフォームとサブフォームで結合しようと試みましたが成功しませんでした。成分IDと中間IDの自動ナンバリングができないためです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3は下記の内容です。 処方箋ID 1 ↓(リレーション) 中間ID 成分ID 薬材料ID 区分 1 001 10 (主) 1 002 11 (部分) で リストなどは成分IDの順で並べ分析は中間IDと区分でグループ化し薬材料の統計・分析をするという事ですが主と部分の結びつきはありません。するとすれば成分IDは区分的に使い長整数型などで入力し成分IDでもグループ化すれば出来ます。 処方箋ID 1 ↓(リレーション) 中間ID 成分ID 薬材料ID 区分 1 001 10 (主) 1 001 11 (部分) 1 002 20 (主) 1 002 21 (部分) こんな感じで成分IDで主と部分を結び付けられます。クエリを元にフォームを作れば中間テーブル成分テーブルに書き込めると思います。 shingoogooさんの作った構成では下記のようになるということですね。(中間と成分が逆かもしれませんが) 処方箋ID 1 ↓(リレーション) 中間ID 成分ID 1 001 1 002 ↓(リレーション) 成分ID 薬材料ID 001 10(主) 001 11(部分) 002 20(主) 002 21(部分) フォームにすると単票方の中に単票型でその中に帳票型ではひとつの成分の主と部分を入力し中間単票型フォームのレコードを次に進めて次の成分を入力するような格好になるのでは。 処方箋fm内に帳票型のフォームを入れ帳票型のフォームに薬材料のフォームを表示するボタンでも作りリンクするようにした方がキー同士の連携を取るには良いのかもしれません。 取り合えずオートナンバーが振られない状況なら主キーとレコードキーになる副キーとリレーションをとりフォーム同士のリンクも同じリレーションにすれば振られるはずです。
その他の回答 (3)
- O_cyan
- ベストアンサー率59% (745/1260)
成分テーブルの意味は解りました。 しかし成分テーブルで成分IDと処方箋IDを管理するだけなら 処方箋テーブル.処方箋IDと中間テーブル.中間IDを1対多でリレーション。 中間テーブル:中間ID(超整数型)&成分ID(オートナンバー型)&薬材料ID(Lookup to:薬材料の名前)として 中間テーブル.成分ID(オートナンバー型)と薬材料テーブル.薬材料IDをリレーション これで処方箋ID→中間IDと成分ID→薬材料IDのリレーションを作り中間テーブルの成分IDで薬材料テーブルから薬材料IDを抽出し区分で分類し統計を取れるのではないでしょうか。 >主と部分が混在する薬材料テーブルから主と部分の関係を効率よく分けて表示したり分析したり出来ますか? 主と部分が混在する薬材料テーブルから効率よく分類等するには薬材料テーブルのレコードの構成ではないでしょうか。 薬材料テーブルの区分で主と部分を判定するフィールドを作る。分類するときは主か部分でグループ化し薬材料名?でグループ化すれば良いのではと思いますが。
補足
何度も答えて頂いて有難う御座います。 提案されたテーブルの構成ですが、すこし分かりづらいので聞きたいです。テーブルは全部で3つで。 (1)処方箋テーブルに(処方箋ID、処方箋名)、(2)中間テーブルに(中間ID(超整数型)、処方箋ID、成分ID(オートナンバー)、薬材料ID(Lookupで薬材料テーブル))、(3)薬材料テーブルに(薬材料ID、材料名、区分)となるのでしょうか? リレーションは、(1)処方箋テーブルの処方箋IDと中間テーブルの処方箋IDの1:M薬材料ID、(2)中間テーブルの薬材料IDと薬材料テーブルの薬材料IDの薬材料IDでしょうか? この場合、実質成分IDが処方箋IDと薬材料IDのリレーションを作りますが、中間IDで、薬剤のリストされる順番や、個々の薬材成分の主と部の結びつきをはっきりさせるにはどうすればいいのですか? ひとつの処方箋にある材料を単に複数の主と複数の部がある、というのではなく、それぞれの組み合わせを出したいです。 教えてください。
- O_cyan
- ベストアンサー率59% (745/1260)
>中間IDを整数型にするのは 中間IDを整数型にするのはオートナンバーで処方箋IDが振られた際に中間IDに処方箋IDと同じキーを持ってきてリレーションするためです。 テーブルの構成を見ると成分テーブルは不必要なのではと思いますが。(他の使用目的があるのでしたら別ですが) 処方箋テーブル・中間テーブル(処方箋の内容)・薬材料テーブルで足りるのではないかと思いますけど。 処方箋テーブルに中間テーブルがぶら下がり中間テーブルに薬材料テーブルがぶら下がる構成で足りると思います。 処方箋IDと中間ID間で1対多のリレーションをすれば問題はないはずで処方箋IDを主キーに多側の中間IDは入力したレコード数分の薬材料IDがあるレコードが出来ますので処方箋IDのみで管理できる。 中間テーブルから処方箋IDで抽出すれば1処方箋分のレコードが抽出できる。処方箋テーブルに日付があれば処方箋テーブルの日付を使い何月何日から何月何日までの使用薬材料が集計できる等 管理が楽ではないでしょうか。 >最後の部分に書かれているのはこの構成自体を変更する必要があるのですか >薬材料も中間IDと共通するフィールドを追加して処方箋IDと中間IDを1レコード内に持つようにするべきではないでしょうか のことでしょうか・・ テーブルにフィールドを1つ追加するだけなので構成自体を変える必要はないと思います。 データベースを構築する際に各テーブルのレコードは共通するキーを持たせた方が構築も楽でリレーションも複雑にならずシステム自体の管理もやり易い。この考えからです。
お礼
ご教示ありがとうございました。 もう1つ聞かせてください。 成分テーブルの意味は、1つの処方箋の中に複数使われる薬材料のうち1つを管理し、中間では、その薬材料の主(牛など)と部分(血のど)の組み合わせを作っています。それで、行いたい分析の一つに主と部分の関係の統計があるのですが、例えば、血が使われている処方箋は主に、牛が80%で鳥が12%とか、牛の使われる部分の多くは脂肪で、その次が血であるとか。その場合、この構成で、主と部分が混在する薬材料テーブルから、主と部分の関係を効率よく分けて表示したり分析したり出来ますか?
- O_cyan
- ベストアンサー率59% (745/1260)
構成がちょっと解りにくいのですが・・。 中間ID・薬材料IDをオートナンバーから長整数型にして処方箋IDのオートナンバーを持ってくるように変更すれば出来ると思います。 メインフォームと各サブフォームに共通するキーがない状態だと思うのですが・・。そのため入力できない? 今のテーブルままの構成だと処方箋IDではなく中間IDを主キーに持った方が良いような構成だと思います。 処方箋IDに各レコードをぶら下げるならオートナンバーで主キーを持ち各テーブルのレコードは処方箋IDで管理するようにしないとだめなのでは。 入力時は処方箋IDでサブフォームまで入力し入力時に中間IDを別にふり成分と薬材料も中間IDと共通するフィールドを追加して処方箋IDと中間IDを1レコード内に持つようにするべきではないでしょうか。 そうすれば処方箋IDでも中間IDでもどちら側からでも管理できるのでは。
お礼
迅速なお答え有難う御座いました。 中間IDを整数型にするのは、入力時に自動で番号がつかないので、あらかじめレコードの分だけ準備しておく必要があるのでしょうか? そうすると、やはり処方箋IDでサブフォームまで入力して、その後薬材料の入力という順番になるのでしょうか? あと、最後の部分に書かれているのは、この構成自体を変更する必要があるのですか? なにぶん初心者ですので、最後の意味が把握仕切れないです。お願いします。
補足
分かりやすい構成説明を有難う御座いました。 実際に教えてもらった構成でやってみて、処方箋IDや主と部の振り分けが出来ているのが確認できました。処方箋IDと薬材料IDとの結びつきの間に中間テーブルを置いただけのシンプルな構成なので、管理がしやすいと思いました。フォームもサブフォームの中にサブフォームを作らずに、サブフォームだけで、成分IDの番号は手入力、薬材料はLookUp toで選択入力できました。気になったのですが、クエリを元にフォームを作るというのは、このフォーム構成ではなくて、別の方法を言われているのですか? もしそうなら、そのことについてもう少し教えて欲しいです。お願いします。