DBデータベーススペシャリスト試験 午後Ⅰ

平成21年度春期 データベーススペシャリスト 午後Ⅰ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの基礎理論に関する次の記述を読んで、設問1~3に答えよ。 Z市では、長期にわたる糖尿病患者に対して、専門医(病院)と、掛かり付け医(病院)が連携してケアを行うことになった。そこで、病院間の地域連携に必要な診療情報の共有・交換のために、データモデルについて検討を行った。 〔診療情報の関係及び関数従属性〕 糖尿病治療に関する診療情報を共有・交換するためのデータ形式を検討した。関係の表記は、関係の属性の代わりに、別の関係も取り得るように拡張した形式(XMLに対応付けられる形式)を用いることにした。この形式による診療情報の関係スキーマは、図1のとおりである。図3~6は、図2の関数従属性の表記法に従って、それぞれの関係について、属性間の関数従属性を表したものである。図1、3~6の主な属性と関係の意味及び制約を、表に示す。 図1 診療情報の関係スキーマ(一部未完成) 表 属性と関係の意味及び制約(一部省略) 図2 関数従属性の表記法 図3 関係“患者”の属性間の主な関数従属性(未完成) 図4 関係“地域連携”の属性間の主な関数従属性 図5 関係“診療”の属性間の主な関数従属性 図6 関係“経過・評価”の属性間の主な関数従属性 設問1 関係“患者”及び“地域連携”について、(1)~(3)に答えよ。 (1)表の属性と関係の意味及び制約を基に、図3を完成させよ。□には、属性名を記述し、関数従属性は図2の表記法に従うこと。また、導出される関数従属性は、省略するものとする。 (2)図4中に表記された関数従属性①~⑦のうち、図1の構造では成立しないものがある。その番号と、成立しない理由を60字以内で述べよ。 (3)図4中で、推移的関数従属性があれば、その例を一つ挙げよ。なければ、“なし”と答えよ。 設問2 関係“診療”について、(1)~(5)に答えよ。 (1)関係“診療”は、第1正規形の条件を満たしていない。その根拠を30字以内で述べよ。 (2)関係“診療”を次のような三つの関係“診療・診断”、“合併症”及び“治療・指導”に分割した。各関係のそれぞれの候補キーをすべて挙げよ。 診療・診断(患者ID、診断日、主診断名、発症日、糖尿病の病型) 合併症(患者ID、診断日、網膜症、神経障害、じん症、その他) 治療・指導(患者ID、診断日、指導日、食事療法、運動療法、薬品名、調理担当、指示カロリー、自己血糖測定有無、測定器) (3)関係“診療・診断”は、第1正規形、第2正規形、第3正規形のうち、どこまで正規化されているか。また、その根拠を60字以内で述べよ。 (4)関係“治療・指導”は、タプルの挿入に関してどのような問題があるか。30字以内で具体的に述べよ。 (5)関係“治療・指導”を、第3正規形に分割せよ。 設問3 関係“経過・評価”について、(1)、(2)に答えよ。 (1)図1は、病院間で診療情報を共有・交換するためのデータ形式の検討結果である。図6の関数従属性を基に、図1中の[a]~[d]に入れる適切な字句を、図1の表記に倣って答えよ。図6中の網掛け部分の属性は省略し、それ以外の該当する属性名を記述するものとする。 (2)実際の業務では、血液検査と尿検査を同一日に行えない場合があることが判明した。そのような場合に対応するためには、関係“経過・評価”をどのように変更すればよいか。変更後の[a]~[c]に入れる適切な字句を答えよ。
図1 診療情報の関係スキーマ(一部未完成)。患者、地域連携、診療、経過・評価の関係スキーマを示し、一部の関係名・属性名が空欄になっている。
図1 診療情報の関係スキーマ(一部未完成)。患者、地域連携、診療、経過・評価の関係スキーマを示し、一部の関係名・属性名が空欄になっている。
表 属性と関係の意味及び制約(一部省略)。患者情報、診療、検査、評価などの属性・関係について、その意味や記録上の制約を一覧化した表。
表 属性と関係の意味及び制約(一部省略)。患者情報、診療、検査、評価などの属性・関係について、その意味や記録上の制約を一覧化した表。
図2 関数従属性の表記法。属性間および関係を含む属性間の関数従属性を、矢印や包含枠で表す記法の例を示す図。
図2 関数従属性の表記法。属性間および関係を含む属性間の関数従属性を、矢印や包含枠で表す記法の例を示す図。
図3 関係“患者”の属性間の主な関数従属性(未完成)。患者IDを中心に、患者情報、職業等、家族構成などの属性間の関数従属性を示す未完成図。
図3 関係“患者”の属性間の主な関数従属性(未完成)。患者IDを中心に、患者情報、職業等、家族構成などの属性間の関数従属性を示す未完成図。
図4 関係“地域連携”の属性間の主な関数従属性。患者ID、入院日、退院日、身体計測値、紹介先・紹介元の属性間の関数従属性を番号付きで示す図。
図4 関係“地域連携”の属性間の主な関数従属性。患者ID、入院日、退院日、身体計測値、紹介先・紹介元の属性間の関数従属性を番号付きで示す図。
図5 関係“診療”の属性間の主な関数従属性。診断、合併症、生活指導、治療内容、薬物療法に含まれる属性間の関数従属性を示す図。
図5 関係“診療”の属性間の主な関数従属性。診断、合併症、生活指導、治療内容、薬物療法に含まれる属性間の関数従属性を示す図。
図6 関係“経過・評価”の属性間の主な関数従属性。検査日、患者ID、評価日、経過月数を中心に、血液検査、尿検査、評価項目などの従属性を示す図。
図6 関係“経過・評価”の属性間の主な関数従属性。検査日、患者ID、評価日、経過月数を中心に、血液検査、尿検査、評価項目などの従属性を示す図。
解き方のヒントを見る

決定項を先に確定させる検討手順

属性どうしの依存関係を判断するときは、結論を急がず、どの属性の値が決まれば他の属性の値が一つに定まるのかを、与えられた業務上の前提から一つずつ確かめる姿勢が大切です。その土台が固まってから他の論点に進みましょう。

この問題で問われていること

観点は一つ、各属性の値を一意に決める属性の組合せを、記述された前提条件だけを根拠に見極めることです。一般的な常識や思い込みで依存関係を補わず、条件の文言が何を保証しているかを確認してから判断してください。

視点

関数従属性は、ある属性の組の値が同じなら別の属性の値も必ず同じになる、という制約です。手元の具体例でたまたまそうなっていることとは区別します。検討では、値が一つに定まるかどうかを前提条件から読み取ります。そのうえで、決める側と決まる側を書き出して整理すると、判断の根拠が明確になります。

確認ポイント

  • 前提条件の文言から、どの属性の値が決まれば別の属性が一つに定まるかを書き出したか
  • 具体例の値の並びだけで依存関係を決めつけず、条件の記述と照合したか
  • 書き出した依存関係を根拠として示せる状態にしてから、他の判断に進んだか
正解と解説を見る

解説

糖尿病患者の診療情報を病院間で共有するため、XMLに対応付けられる入れ子の関係スキーマ(図1)と関数従属性の図(図3~6)を材料に、関数従属性の完成と識別、候補キー、正規形の判定、更新時の異状、第3正規形への分割、関数従属性に基づく入れ子構造の決定を問う問題です。どの問いも、図2の表記法に従って「どの枠から矢印が出ているか」を正確に読むことが出発点になります。

問題の全体像

Z市では、専門医と掛かり付け医が連携して糖尿病患者をケアします。そのために必要な診療情報の共有・交換用データ形式として、属性の代わりに別の関係も持てる入れ子形式(XMLに対応付けられる形式)の関係スキーマ(図1)を検討しています。表に属性の意味と制約が示され、図3~6に関係「患者」「地域連携」「診療」「経過・評価」の関数従属性が図2の表記法で描かれています。出題趣旨では、関数従属性の完成と識別、正規形の識別、問題点の指摘と関係の分割、XMLに対応付けられるデータ形式への変換を通じて、基礎理論を使ってデータモデルを設計する能力を評価するとしています。図2の凡例では、単独の箱から出る矢印はその属性が決定項であることを表し、複数の属性を囲む枠から出る矢印は、その属性の組全体が決定項であることを表します。この違いを読み分けることが全設問の土台になります。

設問1(1)

表の制約を一つずつ関数従属性に直すと、図3の空欄が埋まります。①「性別:登録日による変更はない」ので、性別は患者IDだけで決まります。生年月日も同じく患者IDだけで決まります。②「患者名・患者住所:登録日によって変更があり得る」ので、この二つは患者IDだけでは決まらず、{患者ID、 登録日}で決まります。③「年齢:登録日現在の患者の年齢」なので、年齢は{生年月日、 登録日}で決まります。これを図3の枠に当てはめます。公式解答例では、左端の単独の箱が「年齢」です。そこへ矢印を出している横長の枠が囲む二つの箱が「生年月日」と「登録日」です。左上の縦長の枠は「性別」と「生年月日」、左下の枠は「患者名」と「患者住所」です。中央の縦長の枠は「登録日」と「患者ID」を囲んでいます。そのうえで、患者IDの箱から{性別、 生年月日}の枠へ矢印を引き、中央の縦長の枠({患者ID、 登録日})から{患者名、 患者住所}の枠へ矢印を引いて完成させています。「導出される関数従属性は省略する」という指示があるので、患者IDから年齢へ直接引くような推移的に導ける矢印は描きません。

設問1(2)

図4では、①と③の矢印はいったん点線の箱「紹介先」「紹介元」に入り、そこから{病院名、 住所、 担当医、 担当スタッフ}の枠へ向かっています。これに対して②は、患者IDと入院日を囲む横長の枠の右の辺から、点線の箱を経由せずに直接{病院名、 住所、 担当医、 担当スタッフ}の枠へ引かれています。図1の地域連携には、紹介先(病院名、 住所、 担当医、 担当スタッフ)と紹介元(病院名、 住所、 担当医、 担当スタッフ)の二つの入れ子の関係があり、同じ属性名が2組あります。図1の注3でも「紹介先.病院名」「紹介元.病院名」のように区別するとされています。そのため、どちらの関係かを指定せずに「病院名」などが一つに決まるという②は、図1の構造では成り立ちません。公式解答例では番号を②とし、理由を「紹介先と紹介元があり、{病院名、 住所、 担当医、 担当スタッフ}は一意に決まらない」としています。答案では「紹介先と紹介元の2組がある」ことと「そのため値が一意に決まらない」ことの2点を60字以内に収めます。

設問1(3)

まず図4の決定項を正しく読みます。⑤の矢印は、患者IDの箱からではなく、患者IDと退院日を囲む縦長の枠の左の辺から入院日へ出ています。したがって{患者ID、 退院日}→入院日です。④の矢印も、患者IDと入院日を囲む横長の枠の下の辺から退院日へ出ています。したがって{患者ID、 入院日}→退院日です。同じように、⑥は横長の枠({患者ID、 入院日})から身長などへ、⑦は縦長の枠({患者ID、 退院日})から身長などへ、①と③は縦長の枠から紹介先・紹介元へ出ています。つまり、図中のどの矢印も決定項は{患者ID、 入院日}か{患者ID、 退院日}のどちらかです。図4から読み取れる範囲では、この二つの組が互いを決定し合う構造になっていて、どちらも候補キーの役割を果たすと考えられます(この候補キーは公式解答例に示されたものではなく、図からの読み取りです)。推移的関数従属性とは、キーX→Y、Y→Z が成り立ち、しかもYからXが決まらない場合の、XからZへの従属をいいます。図4にはキー以外の属性(身長、体重、紹介先など)を決定項とする矢印がありません。{患者ID、 入院日}と{患者ID、 退院日}の間の従属は両方向に成り立つので、推移的関数従属性の条件(YからXが決まらない)も満たしません。以上から、公式解答例のとおり「なし」となります。

設問2(1)

第1正規形の条件は、すべての属性が単一値(それ以上分解しない値)をとることです。図1の関係「診療」は、属性の位置に診断(…)、合併症(…)、治療内容(…)、生活指導(…)という関係そのものを持っています。さらに治療内容の中の薬物療法は「*薬品名」、つまり複数の値をとり得ます。公式解答例では、根拠を「関係の中に単一値とならない関係『診断』などがあるから」としています。答案では、属性として関係(または繰返し)を含み、単一値にならないことを30字以内で示します。

設問2(2)(a)

図5では、患者IDと診断日を囲む縦長の枠から点線の箱「診断」へ矢印が出ており、診断は{主診断名、 発症日、 糖尿病の病型}を持ちます。したがって、関係「診療・診断」では{患者ID、 診断日}→{主診断名、 発症日、 糖尿病の病型}が成り立ちます。患者IDだけでは診断日ごとの診断を区別できず、診断日だけでは患者を区別できません。また、他の属性の組から{患者ID、 診断日}を決定する従属は示されていません。公式解答例では、候補キーを{患者ID、 診断日}の一つだけとしています。

設問2(2)(b)

図5では、患者IDと診断日を囲む縦長の枠から点線の箱「合併症」へ矢印が出ており、合併症は{網膜症、 神経障害、 じん症、 その他}を持ちます。表でも、診断日は「主診断名及び合併症などの診断を確定した日付」とされています。したがって{患者ID、 診断日}→{網膜症、 神経障害、 じん症、 その他}が成り立ちます。所見の属性から患者IDや診断日が決まることはありません。公式解答例では、候補キーを{患者ID、 診断日}としています。

設問2(2)(c)

関係「治療・指導」には、決定項の異なる属性が混在しています。図5によると、治療内容の食事療法と運動療法は{患者ID、 診断日}で決まり、生活指導の調理担当、指示カロリー、自己血糖測定有無、測定器は、患者IDと指導日を囲む横長の枠から出る矢印により{患者ID、 指導日}で決まります。薬品名は「*薬品名」であり、複数の薬品を処方する場合があるので、{患者ID、 診断日}に対して複数の値をとります。そのため、タプルを一意に識別するには、患者ID、診断日、指導日に加えて薬品名もキーに含める必要があります。公式解答例では、候補キーを{患者ID、 診断日、 指導日、 薬品名}としています。

設問2(3)

関係「診療・診断」の属性はすべて単一値なので、第1正規形を満たします。候補キーは{患者ID、 診断日}で、非キー属性の主診断名、発症日、糖尿病の病型はキー全体に従属し、キーの一部(患者IDだけ、診断日だけ)には従属しません。よって第2正規形も満たします。さらに、非キー属性の間の従属(例えば主診断名→発症日)は図5に示されていないので、推移的関数従属性もありません。公式解答例では、正規形を「第3正規形」、根拠を「属性がすべて単一値を取る。非キー属性が候補キーに完全関数従属する。候補キーからの推移的関数従属がない」としています。答案では、第1・第2・第3正規形それぞれの条件を満たすことを60字以内で並べます。

設問2(4)

関係「治療・指導」の候補キーは{患者ID、 診断日、 指導日、 薬品名}です。キーを構成する属性にはNULLを入れられないので、診断を確定して食事療法や運動療法などの治療内容を指示していても、まだ生活指導を行っていない(指導日が決まっていない)段階では、タプルを挿入できません。これは、決定項の異なる属性を一つの関係にまとめたことで起きる挿入時の異状です。公式解答例では「診断しても、指導を行わないと情報を登録できない」としています。答案では、何が未確定だと、何の情報が登録できないのかを具体的に30字以内で示します。

設問2(5)

決定項ごとに関係を分けます。①{患者ID、 指導日}で決まる調理担当、指示カロリー、自己血糖測定有無、測定器を「生活指導(患者ID、 指導日、 調理担当、 指示カロリー、 自己血糖測定有無、 測定器)」にします。②{患者ID、 診断日}で決まる食事療法と運動療法を「治療内容(患者ID、 診断日、 食事療法、 運動療法)」にします。③複数の値をとる薬品名は、{患者ID、 診断日}と組み合わせて「薬物療法(患者ID、 診断日、 薬品名)」にします。これは公式解答例の分割と同じです。分割後は、どの関係でも非キー属性がキー全体にだけ従属し、推移的関数従属もないので第3正規形になります。指導前でも治療内容や薬物療法を登録できるようになり、設問2(4)の異状も解消されます。

設問3(1)(a)

図6では、患者IDと評価日を囲む縦長の枠から、最終眼科受診日、アキレス腱反射、{体重、 体脂肪率、 腹囲}の枠、経過月数へそれぞれ矢印が出ています。さらに、患者IDと経過月数を囲む横長の枠から目標値へ矢印が出ています。図1の経過・評価は、患者IDに続けて体重、体脂肪率、最終眼科受診日などを1件の評価として並べる形式です。そのため、評価を特定する評価日と、それに付随する経過月数と目標値を[a]に並べます。また、この形式では血液検査と尿検査を入れ子で持つので、それらの検査を行った検査日も同じ並びに置きます。公式解答例では、aを「評価日、 検査日、 経過月数、 目標値」としています。

設問3(1)(b)

図6では、患者IDと検査日を囲む枠から点線の箱「血液検査」へ矢印が出ており、その先の枠に血液検査の項目が並んでいます。問題文の指示により網掛けの属性(空腹時随時種別、グリカルビン、TG、T-CHO、Cre、HDL-CHO、LDL-CHO)は省略します。そのため、網掛けのない「血糖値」と「HbA1c」が残ります。公式解答例でも、bは「血糖値、 HbA1c」です。

設問3(1)(c)

図6では、患者IDと検査日を囲む枠から点線の箱「尿検査」へ矢印が出ており、その先の枠に「尿糖」と「尿たん白」があります。どちらも網掛けではないので、両方を記述します。公式解答例でも、cは「尿糖、 尿たん白」です。

設問3(1)(d)

図6では、患者IDと評価日を囲む枠から点線の箱「アキレス腱反射」へ矢印が出ており、その先の枠に「右」と「左」があります。表でも、アキレス腱反射は{右、 左}の所見情報を記録するとされています。公式解答例でも、dは「右、 左」です。

設問3(2)(a)

表の検査日には「両方の検査は同一日に実施するものとする」という制約があります。そのため、変更前は一つの検査日を経過・評価の並び([a])に置き、血液検査と尿検査で共有していました。血液検査と尿検査を別の日に行う場合があるなら、共通の検査日一つでは両方の日付を表せません。そこで検査日を[a]から外し、それぞれの検査の入れ子の関係に移します。その結果、[a]には評価に付随する属性だけが残ります。公式解答例では、変更後のaを「評価日、 経過月数、 目標値」としています。

設問3(2)(b)

[a]から外した検査日を血液検査の入れ子の関係に持たせれば、血液検査を行った日付を個別に記録できます。公式解答例では、変更後のbを「検査日、 血糖値、 HbA1c」としています。網掛けの属性を省略する扱いは設問3(1)と同じです。

設問3(2)(c)

尿検査にも同じように検査日を持たせれば、血液検査とは別の日付を記録できます。公式解答例では、変更後のcを「検査日、 尿糖、 尿たん白」としています。(b)と(c)の両方に検査日を置くことで、同一日に実施するという制約がなくても、二つの検査の日付を独立して表せるようになります。

学習のポイント

図2の表記(枠から出る矢印は属性の組が決定項)を正確に読むこと、多値の属性や入れ子の関係と第1正規形の関係、候補キーの導き方、推移的関数従属性の定義、キーの一部が未確定なためにタプルを挿入できない異状、関数従属性に沿った入れ子構造の組み立てを重点的に学習してください。

出典:独立行政法人 情報処理推進機構(IPA)平成21年度春期 データベーススペシャリスト試験 午後Ⅰ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針