Help us understand the problem. What is going on with this article?

平成31年度春 応用情報技術者試験 午後 問6 データベース

More than 1 year has passed since last update.

問題文はIPA公式サイトより引用

問題文

薬剤管理システムの再構築に関する次の記述を読んで、設問1~4に答えよ。

 W病院は、複数の外来診療科をもっており、症状や病状に応じて処方箋を発行している。W病院には院内薬局があり、受診者の多くは院内薬局で薬剤の処方を受ける。
 処方箋には期限があり、発行年月日から有効年月日までを、薬剤の処方を受けることのできる期間としている。
 W病院では、受診者への医療サービス向上を目的に、薬剤管理システムの再構築を行うことになった。再構築するシステムには、医師の処方箋作成を支援する次のチェック機能を実装する。
・処方箋発行の際、処方しようとしている薬剤と過去6か月以内にW病院で発行した処方箋に記載の薬剤との組合せに対し、薬剤併用チェックを行う。薬剤併用チェックでは、併用を禁止する“併用禁忌”となる薬剤の組合せ、及び併用に注意を要する"併用注意"となる薬剤の組合せに該当しないことを確認する。
・院内薬局で処方することを前提に、処方箋発行時に院内薬局の薬剤に対する在庫チェックを行う。在庫チェックでは、発行した処方箋に記載の薬剤が、院内薬局で有効年月日まで確保されるよう、在庫の保証を行う。

 開発に当たり設計した、薬剤管理システムのデータベースのE-R図を図1に示す。
 なお、“在庫量大人1日”、“処方量大人1日”とは、“大人1日の分量”を単位とした在庫量、処方量を示す。
スクリーンショット 2019-07-24 21.32.47.png
注記 属性名の実践の下線は主キー、破線の下線は外部キーを示す。
主キーの実践がついている属性名には、外部キーの破線を付けない。
図1 薬剤管理システムのデータベースのE-R図(抜粋)
 このデータベースでは、E-R図のエンティティ名をテーブル名に、属性名を列名にして、適切なデータ型で表定義した関係データベースによって、データを管理する。
 業務処理と操作対象のテーブルを表1に示す。また、テーブルの列に対する処理内容を表2に示す。ここで、表2中の括弧付き数字は、表1中の業務処理の括弧付き数字に対応している。
表1 業務処理と操作対象のテーブル(抜粋)

担当 業務処理 操作対象 作成 捜査対象 更新 捜査対象 削除
受付 外来受診の受付 (1)初回の外来受診 受診者
外来受診
- -
(2)2回目以降の外来受診 外来受診 - -
(3)受診者情報変更時の修正 - 受診者 -
医師 処方箋の作成 (4)処方箋の登録(発行前) 処方箋
処方箋明細
外来受診 -
チェックによる
見直し
(5)薬剤併用チェック
c - c
チェックによる
見直し
(6)在庫チェック
c
(7)処方箋(書面)の発行 - 処方箋
薬剤在庫
-
院内薬局 (8)薬剤の処方(薬剤の受渡し) - 処方箋
薬剤在庫
-
薬剤の発注 (9)初回発注の薬剤 薬剤
薬剤在庫
- -
(10)発注実績のある薬剤 - - -
(11)薬剤の入庫 - d -
(12)薬剤併用情報の定期メンテナンス 薬剤併用情報

表2 テーブルの列に対する処理内容(抜粋)

テーブル 処理内容 作成時 処理内容 更新時
受診者 住所 住所を設定する。(1) e
外来受診 f NULLを設定する。(1)(2) 値を更新する。(4)
処方箋 発行医師コード NULLを設定する(4) 値を更新する。(7) 値を更新しない。(8)
処方箋 発行年月日 NULLを設定する(4) 値を更新する。(7) 値を更新しない。(8)
処方箋 有効年月日 NULLを設定する(4) 値を更新する。(7) 値を更新しない。(8)
処方箋 薬剤処方年月日 NULLを設定する(4) 値を更新しない。(7) 値を更新する。(8)
薬剤在庫 在庫量_大人1日 0を設定する。(9) 値を減ずる。(8) 値を加える。(11)

〔薬剤併用チェック処理〕
 薬剤管理システムでは、薬剤併用情報テーブルに“併用禁忌”と“併用注意”となる薬剤の組合せを保持しており、この情報を使い、薬剤併用チェックを行う。
 “併用禁忌”と“併用注意”に該当する薬剤の組合せ一覧を出力するSQLを図2に示す。ここで、“:受診者ID”、“:半年前年月日”、“:処方箋ID”は、該当の値を格納する埋込み変数である。また、TO_DATE関数は、指定された文字型の年月日をDATE型に変換するユーザ定義関数である。
 薬剤の組合せ一覧には、今回の外来受診では処方しない薬剤や院内薬局で処方を受けなかった薬剤の組合せも含まれており、出力内容を医師が確認し、必要に応じて処方する薬剤を見直す。見直しの結果、処方箋明細が0件になることもあるが、このような場合には、処方箋の発行は行わない運用とし、処方箋レコードは削除しない。

WITH チェック対象薬剤 AS(
  SELECT B1.薬剤コード FROM 処方箋明細 B1,
    (SELECT A1.処方箋 ID FROM 外来受診 A1, 処方箋 A2
     WHERE A1.受診者ID = :受診者ID AND A1.処方箋ID = A2.処方箋ID AND
           A2.発行年月日 >= TO_DATE(:半年前年月日)) B2
  WHERE B1.処方箋ID = B2.処方箋ID
# g
  SELECT C1.薬剤コード FROM 処方箋明細 C1
  WHERE C1.処方箋ID = :処方箋ID)

SELECT * FROM 薬剤併用情報 T1
WHERE # h
  (SELECT T2.薬剤コード1, T2.薬剤コード2 FROM
    (SELECT U1.薬剤コード AS 薬剤コード1, U2.薬剤コード AS 薬剤コード2
     FROM チェック対象薬剤 U1 CROSS JOIN チェック対象薬剤 U2) T2
   WHERE T1.薬剤コード1 = T2.薬剤コード1 AND T1.薬剤コード2 = T2.薬剤コード2)

図2 “併用禁忌”と“併用注意”に該当する薬剤の組合せ一覧を出力するSQL

〔在庫チェック処理〕
 在庫チェックでは、"発行した処方箋に記載の薬剤が、院内薬局で有効年月日まで確保されるよう、在庫の保証を行う。"という要件の判定を簡素化するために、処方箋を発行し、有効年月日までに院内薬局で処方する可能性のある薬剤の処方量の合計を、確保量として管理するためのビューを作成することにした。
 ビューを作成するSQLを図3に示す。ここで、CURRENT_DATE関数は、参照時の日付をDATE型で返す日時値関数である。
 在庫チェックで在庫不足が判明した際は、医師は処方する薬剤の見直しや、長期処方を希望する受診者との処方量の調整を行う。

CREATE VIEW 処方前確保在庫(薬剤コード, 確保量_大人1日) AS
  SELECT T3.薬剤コード, # i
  FROM
    (SELECT T2.薬剤コード, T2.処方量_大人1日
     FROM 処方箋 T1, 処方箋明細 T2
     WHERE T1.処方箋ID = T2.処方箋ID AND T1.発行年月日 <= CURRENT_DATE AND
           T1.有効年月日 j AND T1.薬剤処方年月日 k) T3
  GROUP BY T3.薬剤コード

図3 確保量を管理するためのビューを作成するSQL

設問1

図1中のa、bに入れる適切なエンティティ間の関連を解答群の中から選び、記号で答えよ。
解答群
スクリーンショット 2019-07-24 22.01.02.png

設問2

表1と表2について、(1)~(3)に答えよ。
(1) 表1中のc、dに入れる適切なテーブル名を答えよ。
(2) 表2中のeに入れる適切な処理内容を、対応する表1中の括弧付き数字を含めて答えよ。
(3) 表2中のfに入れる適切な列名を答えよ。

設問3

図2中のg、hに入れる適切な字句を答えよ。

設問4

図3中のi~kに入れる適切な字句を答えよ。

解説

設問1

図1中のa、bに入れる適切なエンティティ間の関連を解答群の中から選び、記号で答えよ。
解答群
スクリーンショット 2019-07-24 22.01.02.png

正解は下図の通り

平成31年度春 応用情報技術者試験 午後 問6 データベース

設問2

表1と表2について、(1)~(3)に答えよ。
(1) 表1中のc、dに入れる適切なテーブル名を答えよ。

正解
c 処方箋明細
問題文より

 処方箋には期限があり、発行年月日から有効年月日までを、薬剤の処方を受けることのできる期間としている。
 W病院では、受診者への医療サービス向上を目的に、薬剤管理システムの再構築を行うことになった。再構築するシステムには、医師の処方箋作成を支援する次のチェック機能を実装する。
・処方箋発行の際、処方しようとしている薬剤と過去6か月以内にW病院で発行した処方箋に記載の薬剤との組合せに対し、薬剤併用チェックを行う。薬剤併用チェックでは、併用を禁止する“併用禁忌”となる薬剤の組合せ、及び併用に注意を要する"併用注意"となる薬剤の組合せに該当しないことを確認する。
→ チェックによる見直し(薬剤併用チェック)をしており、処方箋の内容が変わる可能性があります。その時に元データを削除して、新しく追加します。
表1 業務処理と操作対象のテーブル(抜粋)の処方箋の作成を参照

担当 業務処理 操作対象 作成 捜査対象 更新 捜査対象 削除
医師 処方箋の作成 (4)処方箋の登録(発行前) 処方箋
処方箋明細
外来受診 -
チェックによる
見直し
(5)薬剤併用チェック
c 処方箋明細 - c 処方箋明細
チェックによる
見直し
(6)在庫チェック
c 処方箋明細 c 処方箋明細 c 処方箋明細
(7)処方箋(書面)の発行 - 処方箋
薬剤在庫
-

d 薬剤在庫
薬剤が入庫したら薬剤在庫の在庫量_大人1日分が増えます。

表1 業務処理と操作対象のテーブル(抜粋)

担当 業務処理 操作対象 作成 捜査対象 更新 捜査対象 削除
院内薬局 (8)薬剤の処方(薬剤の受渡し) - 処方箋
薬剤在庫
-
薬剤の発注 (9)初回発注の薬剤 薬剤
薬剤在庫
- -
(10)発注実績のある薬剤 - - -
(11)薬剤の入庫 - d 薬剤在庫 -
(12)薬剤併用情報の定期メンテナンス 薬剤併用情報

(2) 表2中のeに入れる適切な処理内容を、対応する表1中の括弧付き数字を含めて答えよ。

正解 値を更新する(3)

表2 テーブルの列に対する処理内容(抜粋)

テーブル 処理内容 作成時 処理内容 更新時
受診者 住所 住所を設定する。(1) e 値を更新する(3)

2回目以降の外来受診時に住所などの情報が変わっていれば更新します。
なので、値を更新するが入ります。
実際の作業は、受付時に(3)受診者情報変更時の修正で実施します。

表1 業務処理と操作対象のテーブル(抜粋)

担当 業務処理 操作対象 作成 捜査対象 更新 捜査対象 削除
受付 外来受診の受付 (1)初回の外来受診 受診者
外来受診
- -
(2)2回目以降の外来受診 外来受診 - -
(3)受診者情報変更時の修正 - 受診者 -

住所などの変更は(3)受診者情報変更時の修正で行うので…

正解 値を更新する(3)

(3) 表2中のfに入れる適切な列名を答えよ。

表2 テーブルの列に対する処理内容(抜粋)

テーブル 処理内容 作成時 処理内容 更新時
外来受診 f 処方箋 NULLを設定する。(1)(2) 値を更新する。(4)

表1 業務処理と操作対象のテーブル(抜粋)

担当 業務処理 操作対象 作成 捜査対象 更新 捜査対象 削除
受付 外来受診の受付 (1)初回の外来受診 受診者
外来受診
- -
(2)2回目以降の外来受診 外来受診 - -
(3)受診者情報変更時の修正 - 受診者 -
医師 処方箋の作成 (4)処方箋の登録(発行前) 処方箋
処方箋明細
外来受診 -

処方箋は(1)初回の外来受診と(2)2回目以降の外来受診の時にデータを作成し、まだ何も決まっていないのでNULLにします。
(4)処方箋の登録(発行前)に値を更新します。

正解 処方箋

設問3

図2中のg、hに入れる適切な字句を答えよ。

正解
g UNION
h EXISTS

 薬剤管理システムでは、薬剤併用情報テーブルに“併用禁忌”と“併用注意”となる薬剤の組合せを保持しており、この情報を使い、薬剤併用チェックを行う。
 “併用禁忌”と“併用注意”に該当する薬剤の組合せ一覧を出力するSQLを図2に示す。ここで、“:受診者ID”、“:半年前年月日”、“:処方箋ID”は、該当の値を格納する埋込み変数である。また、TO_DATE関数は、指定された文字型の年月日をDATE型に変換するユーザ定義関数である。
 薬剤の組合せ一覧には、今回の外来受診では処方しない薬剤や院内薬局で処方を受けなかった薬剤の組合せも含まれており、出力内容を医師が確認し、必要に応じて処方する薬剤を見直す。見直しの結果、処方箋明細が0件になることもあるが、このような場合には、処方箋の発行は行わない運用とし、処方箋レコードは削除しない。

上記の問題文を実現するSQLです。

チェック対象薬剤では処方される薬剤の発行年月日を確認し照合をかけています。
チェック時に2つのテーブルを結合しているのでg UNION ALLを使います。

薬剤併用情報では薬剤同士を組み合わせ併用情報を探します。
併用情報が「あれば」情報を抽出するのでh EXIATSとなります。

WITH チェック対象薬剤 AS(
  SELECT B1.薬剤コード FROM 処方箋明細 B1,
    (SELECT A1.処方箋 ID FROM 外来受診 A1, 処方箋 A2
     WHERE A1.受診者ID = :受診者ID AND A1.処方箋ID = A2.処方箋ID AND
           A2.発行年月日 >= TO_DATE(:半年前年月日)) B2
  WHERE B1.処方箋ID = B2.処方箋ID
  UNION ALL # g 
  SELECT C1.薬剤コード FROM 処方箋明細 C1
  WHERE C1.処方箋ID = :処方箋ID)

SELECT * FROM 薬剤併用情報 T1
WHERE EXISTS # h
  (SELECT T2.薬剤コード1, T2.薬剤コード2 FROM
    (SELECT U1.薬剤コード AS 薬剤コード1, U2.薬剤コード AS 薬剤コード2
     FROM チェック対象薬剤 U1 CROSS JOIN チェック対象薬剤 U2) T2
   WHERE T1.薬剤コード1 = T2.薬剤コード1 AND T1.薬剤コード2 = T2.薬剤コード2)

図2 “併用禁忌”と“併用注意”に該当する薬剤の組合せ一覧を出力するSQL

設問4

図3中のi~kに入れる適切な字句を答えよ。

正解
i SUM(T3.処方量大人1日)
j >= CURRENT
DATE
k IS NULL

〔在庫チェック処理〕
 在庫チェックでは、"発行した処方箋に記載の薬剤が、院内薬局で有効年月日まで確保されるよう、在庫の保証を行う。"という要件の判定を簡素化するために、処方箋を発行し、有効年月日までに院内薬局で処方する可能性のある薬剤の処方量の合計を、確保量として管理するためのビューを作成することにした。
 ビューを作成するSQLを図3に示す。ここで、CURRENT_DATE関数は、参照時の日付をDATE型で返す日時値関数である。
 在庫チェックで在庫不足が判明した際は、医師は処方する薬剤の見直しや、長期処方を希望する受診者との処方量の調整を行う。

これを実現するSQLです。

サブクエリでは発行日から有効年月日までのデータを抽出します。
→ T1.発行年月日 <= CURRENT_DATE AND T1.有効年月日 >= CURRENT_DATE ← j

まだ処方されていない薬剤が抽出対象なので
→ T1.薬剤処方年月日 IS NULL ← k

集計対象は薬剤の量なので
→ SUM(T3.処方量_大人1日) ← i

CREATE VIEW 処方前確保在庫(薬剤コード, 確保量_大人1日) AS
  SELECT T3.薬剤コード, SUM(T3.処方量_大人1日) 
  FROM
    (SELECT T2.薬剤コード, T2.処方量_大人1日
     FROM 処方箋 T1, 処方箋明細 T2
     WHERE T1.処方箋ID = T2.処方箋ID AND T1.発行年月日 <= CURRENT_DATE AND
           T1.有効年月日 >= CURRENT_DATE AND T1.薬剤処方年月日 IS NULL) T3
  GROUP BY T3.薬剤コード

図3 確保量を管理するためのビューを作成するSQL

RyosukeKamei
「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します! 現在、仕事では要求分析から要件定義を中心に上流工程をしていますが、プログラムも書きます!2016年現在、ベンダーマネジメントが主な業務です! 「資格試験勉強をすればするほど、社会貢献ができる?」ウェブサイトを運営しており、並行してシステム構築中 http://korejoap.info/ 子供が3人いまーす
http://sr2s.org/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした