データベーススペシャリスト試験 2009年 午後1 問01
データベースの基礎理論に関する次の記述を読んで、設問1〜3に答えよ。
Z市では,長期にわたる糖尿病患者に対して, 専門医(病院)と,掛かり付け医(病院)が連携してケアを行うことになった。 そこで、 病院間の地域連携に必要な診療情報の共有・交換のために,データモデルについて検討を行った。
〔診療情報の関係及び関数従属性〕
糖尿病治療に関する診療情報を共有・交換するためのデータ形式を検討した。関係の表記は,関係の属性の代わりに, 別の関係も取り得るように拡張した形式(XMLに対応付けられる形式)を用いることにした。 この形式による診療情報の関係スキーマは,図1のとおりである。 図3〜6は、図2の関数従属性の表記法に従って,それぞれの関係について、属性間の関数従属性を表したものである。 図1, 3〜6の主な属性と関係の意味及び制約を、表に示す。







データベースの基礎理論に関する次の記述を読んで、設問1〜3に答えよ。
設問1:関係 “患者”及び“地域連携” について,(1)〜(3)に答えよ。
(1)表の属性と関係の意味及び制約を基に, 図3を完成させよ。□には,属性名を記述し, 関数従属性は図2の表記法に従うこと。 また, 導出される関数従属性は, 省略するものとする。模範解答

解説
解答の論理構成
-
主識別子の確認
表では「患者ID」を「地域で患者を一意に識別する記号」と定義している。よって患者ID → 生年月日, 性別
は自明。 -
時点情報の取り扱い
「患者名」「患者住所」「家族構成」「職業等」は登録毎に変わると記載されている。従って患者ID, 登録日 → 患者名, 患者住所, 家族構成, 職業等
が成立し、図3中央の太枠(患者ID
と登録日
を内包)から上下の破線枠へ矢印を引く。 -
年齢の導出
表には「登録日現在の患者の年齢」とある。図2の「複数属性が決定側」パターンを用い生年月日, 登録日 → 年齢
を水平枠(生年月日
と登録日
をまとめた枠)から年齢
へ描く。 -
ネスト関係の分解
(1) 「職業等(職種, 通勤手段, 徒歩時間)」より
職業等 → 職種, 通勤手段, 徒歩時間
(2) 「家族構成(同居人数, 連絡窓口)」より
家族構成 → 同居人数, 連絡窓口
破線枠から実線子枠へ矢印を引くのは図2下段の規則に従う。
誤りやすいポイント
- 「患者名」「患者住所」の決定側に「登録日」を入れ忘れる
- 「年齢」を
生年月日 → 年齢
と単純化してしまう - ネストされた下位属性に直接
患者ID
から矢印を引く(親→孫の従属性は導出扱いで省略が指示されている) - 図2の記号ルールを読み替えずに左右逆に描いて減点
FAQ
Q: なぜ
A: 表説明に「患者の氏名。登録日にによって変更があり得る。」とあるため、同一 ID で複数レコードが存在します。時点を区別する「登録日」を加えて初めて一意になります。
患者ID
があっても「患者名」が決まらないのですか?A: 表説明に「患者の氏名。登録日にによって変更があり得る。」とあるため、同一 ID で複数レコードが存在します。時点を区別する「登録日」を加えて初めて一意になります。
Q:
A: 設問は“現行スキーマ”の依存関係を問うており、保存するか否かの設計選択は別問題です。保存する場合の正規化条件を満たすために
年齢
を保存せず毎回計算すれば良いのでは?A: 設問は“現行スキーマ”の依存関係を問うており、保存するか否かの設計選択は別問題です。保存する場合の正規化条件を満たすために
{生年月日, 登録日} → 年齢
を示します。Q: 破線枠と実線枠の違いは?
A: 破線枠は「関係(ネスト)」、実線枠は「属性」です。図2下段のルールにより「親属性集」→「ネスト関係」→「下位属性」の3段構えで描きます。
A: 破線枠は「関係(ネスト)」、実線枠は「属性」です。図2下段のルールにより「親属性集」→「ネスト関係」→「下位属性」の3段構えで描きます。
関連キーワード: 関数従属性, 複合キー, ネスト関係, 正規化, 推移的従属
設問1:関係 “患者”及び“地域連携” について,(1)〜(3)に答えよ。
(2)図4 中に表記された関数従属性 ①〜⑦ のうち、 図1の構造では成立しないものがある。その番号と, 成立しない理由を60字以内で述べよ。模範解答
番号:②
理由:関係“ 地域連携” では,紹介先と,紹介元があり, {病院名,住所,担当医,担当スタッフ}は一意に決まらないから
解説
解答の論理構成
- 関係スキーマ確認
図1より “地域連携” は
「患者ID, 入院日, …, 紹介先(病院名, 住所, 担当医, 担当スタッフ),
紹介元(病院名, 住所, 担当医, 担当スタッフ)」
を持つ。 - ② の内容整理
図4 の ② は “患者ID” から直接
{病院名, 住所, 担当医, 担当スタッフ} への関数従属性を示す。 - 一意性の検証
・同一患者が複数回入退院するケースがある。
・かつ “紹介先” と “紹介元” のどちらにも同じ 4 項目が出現する。
したがって “患者ID” 値が同じでも
4 項目は “紹介先”/“紹介元”/入退院の都度で変わり得る。 - 帰結
条件を満たすキーが不足するため
“患者ID → 病院名, 住所, 担当医, 担当スタッフ” は成立しない。
よって ② が誤りである。
誤りやすいポイント
- “紹介先” と “紹介元” を別関係と見誤り、同じ 4 項目が重複して
登場していることに気付かない。 - “患者ID” が主キーだと早合点し、他属性との複合キーの可能性を
検討しない。 - 図中の破線(サブリレーション)と実線(属性)の意味を混同し、
関数従属性の読み取りを誤る。
FAQ
Q: “紹介先” と “紹介元” が同じ病院なら ② は成り立ちませんか?
A: 成立しません。同じ病院になる場合もあれば異なる場合もあり、
一意性を保証できない点は変わらないためです。
A: 成立しません。同じ病院になる場合もあれば異なる場合もあり、
一意性を保証できない点は変わらないためです。
Q: “入院日” や “退院日” を組み込めば病院情報を一意にできますか?
A: はい。例えば {患者ID, 入院日}→{病院名, …} のように
履歴属性を含めれば一意性を確保しやすくなります。
A: はい。例えば {患者ID, 入院日}→{病院名, …} のように
履歴属性を含めれば一意性を確保しやすくなります。
関連キーワード: 関数従属性, 一意性, サブリレーション, 主キー, 正規化
設問1:関係 “患者”及び“地域連携” について,(1)〜(3)に答えよ。
(3)図4中で,推移的関数従属性があれば、その例を一つ挙げよ。なければ,“なし” と答えよ。模範解答
なし
解説
解答の論理構成
-
推移的関数従属性の定義
X → Y、Y → Z、かつ X ↛ Z のとき Z は X に対して推移的に従属。 -
図4の主な関数従属性(問題本文にある矢印①〜⑦を整理)
- 「患者ID → 紹介先」(①)
- 「紹介先 → {病院名, 住所, 担当医, 担当スタッフ}」(破線枠内の矢印)
- 「患者ID → {病院名, 住所, 担当医, 担当スタッフ}」(②)
- 「患者ID → 入院日」(⑤)
- 「入院日 → {身長, 体重, BMI, 体脂肪率, HbA1c}」(⑥)
- 「患者ID → {身長, 体重, BMI, 体脂肪率, HbA1c}」(図中明示)
-
各鎖の判定
(a) 患者ID → 紹介先 → 病院名
③に反し、直接「患者ID → 病院名」(②)が成立。
(b) 患者ID → 入院日 → 身長
同様に「患者ID → 身長」が直接示されている。
他の鎖も同様で、X ↛ Z を満たす組合せは見当たらない。 -
結論
推移的関数従属性の3条件を同時に満たす例が無いため、解答は“なし”。
誤りやすいポイント
- 「2段矢印=推移的」と早合点する
直接の X → Z を見落とさないこと。 - 「紹介先」「紹介元」の中の下位属性(病院名など)を別物と考え、鎖の終点と誤認する。下位属性も図4で直接 “患者ID” に従属している。
- 推移的 FD の定義で “X ↛ Z” を抜かす。定義を一字一句確認する習慣が必要です。
FAQ
Q: 「入院日 → 身長」があるのに推移的でないのはなぜですか?
A: 推移的 FD には “X ↛ Z” が不可欠です。図4では「患者ID → 身長」が直接示されているため、鎖があっても推移的とは判定しません。
A: 推移的 FD には “X ↛ Z” が不可欠です。図4では「患者ID → 身長」が直接示されているため、鎖があっても推移的とは判定しません。
Q: 「患者ID」が主キーとは明示されていませんが、推移性の判定に影響しますか?
A: 影響しません。推移的 FD の定義は “主キーかどうか” ではなく “X ↛ Z の有無” で決まります。直接従属が描かれている以上、主キーか否かに関係なく推移的 FD にはなりません。
A: 影響しません。推移的 FD の定義は “主キーかどうか” ではなく “X ↛ Z の有無” で決まります。直接従属が描かれている以上、主キーか否かに関係なく推移的 FD にはなりません。
関連キーワード: 関数従属性, 推移的従属, 正規化, データモデル, 主キー
設問2:関係 “診療” について,(1)〜(5)に答えよ。
(1)関係“診療”は,第1正規形の条件を満たしていない。 その根拠を30字以内で述べよ。模範解答
関係の中に単一値とならない関係“ 診断” などがあるから
解説
解答の論理構成
- 第1正規形の定義
各属性値は原子値(1行1列に単一値)であることが条件です。 - 関係 “診療” の構造確認
【問題文】
「診療(患者ID, 診断日, 指導日,
診断(主診断名, 発症日, 糖尿病の病型),
合併症(網膜症, 神経障害, じん症, その他),
治療内容(食事療法, 運動療法, 薬物療法(*薬品名)),
生活指導(調理担当, 指示カロリー, 自己血糖測定有無, 測定器))」
とあり,1つの属性位置に関係 “診断” などがそのまま格納されています。 - 原子性の判定
たとえば「診断」は3つの属性をまとめた複合値であり,1セル1値の原則を破ります。また「*薬品名」は可変個数の繰返し値で同様に非原子値です。 - 結論
よって「関係の中に単一値とならない関係“診断”などがあるから」と説明できます。
誤りやすいポイント
- 「主キーが決まらない=1NF違反」と勘違いする
- 可変数の繰返し(*)よりもネスト関係の方が本質的問題であることを見落とす
- 関数従属性図に気を取られ,セル内の複合値の存在を確認し忘れる
FAQ
Q: ネストした関係があっても,XML のような階層データなら問題ないのでは?
A: リレーショナルモデルでの正規化を議論しているため,セルに複合構造が入る時点で 1NF を満たしません。XML で表現する場合は別途スキーマ設計が必要です。
A: リレーショナルモデルでの正規化を議論しているため,セルに複合構造が入る時点で 1NF を満たしません。XML で表現する場合は別途スキーマ設計が必要です。
Q: 「*薬品名」のみを理由にしても正解になりますか?
A: 「*」は繰返し値で非原子値なので 1NF 違反の根拠になります。ただし設問は「診断など」と複数例を示す形式が望まれます。
A: 「*」は繰返し値で非原子値なので 1NF 違反の根拠になります。ただし設問は「診断など」と複数例を示す形式が望まれます。
Q: 1NF 違反を解消する一般的手順は?
A: ネストや繰返し部分を独立した関係に分割し,主キーで参照する形(通常は外部キー)に正規化します。
A: ネストや繰返し部分を独立した関係に分割し,主キーで参照する形(通常は外部キー)に正規化します。
関連キーワード: 正規化, 第1正規形, 原子値, リピーティンググループ, 関係スキーマ
設問2:関係 “診療” について,(1)〜(5)に答えよ。
(2)関係“診療” を次のような三つの関係 “診療 診断”, “合併症”及び“治療指導”に分割した。 各関係のそれぞれの候補キーをすべて挙げよ。
模範解答
診療・診断:{患者ID,診断日}
合併症:{患者ID,診断日}
治療・指導:{患者ID,診断日,指導日,薬品名}
解説
解答の論理構成
- 関係分割の確認
【小問説明】では関係“診療”を
“診療 診断(患者ID,診断日,診断)”,
“合併症(患者ID,診断日,合併症)”,
“治療指導(患者ID,診断日,指導日,治療内容)”
に分割している。 - 【図5】中の主要な関数従属性
- “診断日” → “診断”
- “診断日” → “合併症”
- “指導日” → “生活指導”
- “治療内容” → “薬物療法” → *薬品名
- “患者ID” は単独では他属性を決定しない(診療は繰返し可)。
- “診療 診断” の候補キー
- 必要属性:{患者ID,診断日}
- この2属性で“診断”が決まり,他に属性は残らない。
- どちらか1属性を欠くと一意性を失うため最小。
- “合併症” の候補キー
- 完全に同一の理由で {患者ID,診断日} が候補キー。
- “治療指導” の候補キー
- {患者ID,診断日,指導日} で “治療内容” までは決定。
- しかし “治療内容” から *薬品名 は複数値が生じる。
- 一意識別には “薬品名” も追加し {患者ID,診断日,指導日,薬品名} が最小。
誤りやすいポイント
- “患者ID” を主キーと早合点し,全行での重複を許さないと思い込む。
- “指導日” と “診断日” をどちらもキーに入れ忘れ,日付の区別による多重行を見落とす。
- “薬品名” を多値属性と気付かず除外し,治療指導の一意性を壊す。
FAQ
Q: “薬品名” を候補キーに含める決定的な理由は?
A: 【図5】で “薬物療法(*薬品名)” と *印が付いており,“複数の値又は値の組を取り得る” と【図1 注1】に明記されています。したがって同じ患者・同じ診断日・同じ指導日でも薬品名が異なる複数行が存在し得ます。識別には薬品名が不可欠です。
A: 【図5】で “薬物療法(*薬品名)” と *印が付いており,“複数の値又は値の組を取り得る” と【図1 注1】に明記されています。したがって同じ患者・同じ診断日・同じ指導日でも薬品名が異なる複数行が存在し得ます。識別には薬品名が不可欠です。
Q: “診療 診断” と “合併症” の候補キーが同じになるのはおかしくない?
A: 両関係とも決定性を与えるのが “患者ID” と “診断日” の組だからです。内容が異なってもキーの構成は一致し得ます。
A: 両関係とも決定性を与えるのが “患者ID” と “診断日” の組だからです。内容が異なってもキーの構成は一致し得ます。
Q: 候補キーが1つしかないのか?
A: この問題設定では他に機能的決定を担う属性が示されておらず,{患者ID, 診断日} から診断・合併症が決まる前提のため,他に最小鍵候補は存在しません。
A: この問題設定では他に機能的決定を担う属性が示されておらず,{患者ID, 診断日} から診断・合併症が決まる前提のため,他に最小鍵候補は存在しません。
関連キーワード: 関数従属, 候補キー, 正規化, 多値属性, 主キー
設問2:関係 “診療” について,(1)〜(5)に答えよ。
(3)関係“診療 診断” は、第1正規形, 第2正規形, 第3正規形のうち、どこまで正規化されているか。 また、その根拠を60字以内で述べよ。模範解答
正規形:第3正規形
根拠:属性がすべて,単一値を取る。非キー属性が,候補キーに完全関数従属する。候補キーからの推移的関数従属がない。
解説
解答の論理構成
-
候補キーの特定
- 【図1】“診療” の列挙より対象サブ関係の属性は
「患者ID, 診断日, 主診断名, 発症日, 糖尿病の病型」。 - 医療実務では同一患者が同一日に複数の主診断を登録することは想定しづらく,【図5】の矢印も「患者ID」「診断日」で一意に診断が決まることを示している。よって候補キーは {患者ID, 診断日}。
- 【図1】“診療” の列挙より対象サブ関係の属性は
-
第1正規形 (1NF) の確認
- 「主診断名」「発症日」「糖尿病の病型」はいずれも単一値で格納される(*印もなし)。
- ネスト関係は論理モデル上の表記であり,物理実装ではフラット化されるため重複グループや繰返し属性は存在しない。
-
第2正規形 (2NF) の確認
- 非キー属性すべてが候補キー {患者ID, 診断日} に “完全” 関数従属することを【図5】の矢印が示す。部分従属は存在しない。
-
第3正規形 (3NF) の確認
- 「主診断名 → 発症日」や「糖尿病の病型 → 主診断名」など,非キー属性間の関数従属性は図示されていない。
- 従って非キー属性の間に推移的依存はなく,3NF の条件 候補キー → がキー属性でない,というケースがない。
誤りやすいポイント
- 「診断日」単独で主診断を決めると誤認し,候補キーを「診断日」のみとする。患者が複数名いるため誤りです。
- ネスト表記を “複数値” と読み違え,1NF を満たしていないと判断する。図中の*印の有無で確認が必要です。
- 「主診断名」→「糖尿病の病型」のような医学的連想で推移従属を想定してしまう。問題文中に示されない従属は採点対象外です。
FAQ
Q: ネスト関係はそのままテーブルを分割すべきですか?
A: 設問は理論正規化の確認が目的です。物理設計で分割するかはアクセス頻度や性能要件に依存します。
A: 設問は理論正規化の確認が目的です。物理設計で分割するかはアクセス頻度や性能要件に依存します。
Q: もし将来「主診断名」が標準コードで一意になる場合は正規形が変わりますか?
A: 「主診断名」が候補キーになれば {患者ID, 診断日} は冗長となり,キー構造が変わる可能性があります。ただし現行仕様ではその前提はありません。
A: 「主診断名」が候補キーになれば {患者ID, 診断日} は冗長となり,キー構造が変わる可能性があります。ただし現行仕様ではその前提はありません。
Q: 推移的従属があるかどうかはどのように判断しますか?
A: 問題文に示された関数従属性(図中の矢印)だけで判断します。医学的な常識や暗黙知は含めません。
A: 問題文に示された関数従属性(図中の矢印)だけで判断します。医学的な常識や暗黙知は含めません。
関連キーワード: 関数従属性, 正規化, 第3正規形, 候補キー, 推移従属
設問2:関係 “診療” について,(1)〜(5)に答えよ。
(4)関係“治療 指導” は, タプルの挿入に関してどのような問題があるか。30字以内で具体的に述べよ。模範解答
診断しても,指導を行わないと情報を登録できない。
解説
解答の論理構成
- 関係“診療”の機能的従属性
- 図5より
「診断日」→「診断」「合併症」
「指導日」→「生活指導」
と二系統に分かれている。
- 図5より
- 主キーの重複包含
- 患者を識別する「患者ID」に加え,診断を一意化する「診断日」,指導を一意化する「指導日」までも複合キーに含まれる。
- 挿入操作時の矛盾
- 「診断日」は決まったが「指導日」が未定のケースでは,複合キーが未確定となりタプルを登録できない。
- したがって関係“診療”は「診断しても,指導を行わないと情報を登録できない」という挿入異常を抱えると結論付く。
誤りやすいポイント
- 更新異常・削除異常と取り違える。今回はタプルが「入らない」ため挿入異常。
- 「治療内容」や「薬物療法」をキー候補と誤解し,問題の本質を外す。
- 「診断日」と「指導日」を片方だけで主キーと考え,異常が起きないと早合点する。
FAQ
Q: 分割すれば具体的にどのようなリレーションになるのですか?
A: 典型解は「診療‐診断(患者ID, 診断日, …)」と「診療‐指導(患者ID, 指導日, …)」のように,機能従属性の決定項ごとに分離する第3正規形です。
A: 典型解は「診療‐診断(患者ID, 診断日, …)」と「診療‐指導(患者ID, 指導日, …)」のように,機能従属性の決定項ごとに分離する第3正規形です。
Q: 「治療内容」や「生活指導」を別リレーションにすべき根拠は?
A: 図5が示すとおり,いずれも“*”付きで多値を許す属性を抱えており,第1正規形違反を解消するためにも独立関係とするのが一般的です。
A: 図5が示すとおり,いずれも“*”付きで多値を許す属性を抱えており,第1正規形違反を解消するためにも独立関係とするのが一般的です。
Q: 今回の挿入異常はトリガやNULL許容で回避できますか?
A: 技術的には可能ですが,本質的な冗長性・矛盾リスクを残すため,論理設計段階で正規化して回避するのが望ましいです。
A: 技術的には可能ですが,本質的な冗長性・矛盾リスクを残すため,論理設計段階で正規化して回避するのが望ましいです。
関連キーワード: 挿入異常, 第3正規形, 機能従属性, 複合主キー, 正規化
設問2:関係 “診療” について,(1)〜(5)に答えよ。
(5)関係“治療・指導” を、第3正規形に分割せよ。模範解答
生活指導(患者ID,指導日,調理担当,指示カロリー,自己血糖測定有無,測定器)
治療内容(患者ID,診断日,食事療法,運動療法)
薬物療法(患者ID,診断日,薬品名)
解説
解答の論理構成
- 初期関係の取り出し
関係 “診療” には【問題文】「治療内容(食事療法, 運動療法, 薬物療法(*薬品名))」と「生活指導(調理担当, 指示カロリー, 自己血糖測定有無, 測定器)」が含まれ,さらにキー候補となる「患者ID」「診断日」「指導日」が存在します。 - 関数従属性の把握
図5より- 「診断日」→「治療内容」
- 「指導日」→「生活指導」
- 「治療内容」→「薬物療法(*薬品名)」
が読み取れます。したがって
{患者ID, 診断日} → {食事療法, 運動療法, 薬物療法} {患者ID, 指導日} → {調理担当, 指示カロリー, 自己血糖測定有無, 測定器} {患者ID, 診断日, 食事療法, 運動療法} → {薬品名}
- キーの決定
患者が複数回受診するため,【問題文】「患者ID」で一意とはならず,日付を加えた- {患者ID, 診断日}
- {患者ID, 指導日}
が候補キーになります。
- 非キー属性同士の依存を排除(第2→第3正規化)
- {患者ID, 診断日} が決定しているのに “薬品名” がさらに “治療内容” に依存するのは第3正規形違反。
- {患者ID, 指導日} が決定しているのに “調理担当” などが “指導日” のみに依存するのは第2正規形違反。
- 分割
・“治療内容” から “薬物療法” を分離し,主キーに “薬品名” を追加
・“生活指導” は「患者ID」「指導日」をキーに独立
・残った “食事療法”“運動療法” は「治療内容」として保持
以上より模範解答どおりの3関係に帰着します。
誤りやすいポイント
薬品名
を多値属性だからと削除・集約してしまう- 「診断日」「指導日」を混同し,キーを {患者ID, 診断日, 指導日} としてしまう
- 第2正規形を飛ばして一気に分割しようとして依存関係を取り違える
FAQ
Q: なぜ “薬物療法” を独立させるのですか?
A: 【問題文】「薬物療法(*薬品名)」と “*” が付いており,多値を取り得ると明示されています。第1正規形では各セルは単一値でなければならないため,多値部分を別関係に分離し,複合主キー {患者ID, 診断日, 薬品名} を設定します。
A: 【問題文】「薬物療法(*薬品名)」と “*” が付いており,多値を取り得ると明示されています。第1正規形では各セルは単一値でなければならないため,多値部分を別関係に分離し,複合主キー {患者ID, 診断日, 薬品名} を設定します。
Q: “指導日” だけでなく “患者ID” もキーに含める理由は?
A: 同一日に複数患者が存在するため,日付単独では一意になりません。図5の中心に “患者ID” が併記されている点もキー構成を示唆しています。
A: 同一日に複数患者が存在するため,日付単独では一意になりません。図5の中心に “患者ID” が併記されている点もキー構成を示唆しています。
Q: 第3正規形のチェックポイントは?
A: 「非キー属性がキーの一部に部分関数従属しないこと」と「非キー属性が他の非キー属性に従属しないこと」の2点です。分割後は
A: 「非キー属性がキーの一部に部分関数従属しないこと」と「非キー属性が他の非キー属性に従属しないこと」の2点です。分割後は
- 生活指導:非キー属性は全て {患者ID, 指導日} のみに従属
- 治療内容:非キー属性は全て {患者ID, 診断日} のみに従属
- 薬物療法:非キー属性なし
で条件を満たします。
関連キーワード: 第3正規形, 関数従属性, 正規化, 多値属性, キー設計
設問3:関係“経過・評価”について,(1),(2)に答えよ。
(1)図1は,病院間で診療情報を共有・交換するためのデータ形式の検討結果である。 図6の関数従属性を基に,図1中の(a)〜(d)に入れる適切な字句を,図1の表記に倣って答えよ。 図6中の網掛け部分の属性は省略し、それ以外の該当する属性名を記述するものとする。模範解答
a:評価日,検査日,経過月数,目標値
b:血糖値,HbA1c
c:尿糖,尿たん白
d:右,左
解説
解答の論理構成
- 経過・評価関係の構造確認
【問題文】図1の関係定義に「経過・評価(患者ID, (a), 体重, 体脂肪率, …)」とある。従って (a) は“患者ID に次いでまとめて列挙される一群の属性”を表す。 - 図6の中心ブロックから導ける属性
【問題文】図6には二重枠内に「患者ID」「検査日」「評価日」が描かれ、そこから「経過月数」「目標値」へ矢印が伸びている。矢印は関数従属性を示すため、これら4つはセットで (a) に収まる。 - 血液検査グループ (b) の抽出
【問題文】図6で「検査日」→“血液検査”→具体属性の順に矢印が伸びる。網掛けでないのは「血糖値」「HbA1c」であり、この2つが (b)。 - 尿検査グループ (c) の抽出
同様に“尿検査”には「尿糖」「尿たん白」が描かれており、網掛けは無い。よって (c) はこの2属性。 - アキレス腱反射グループ (d) の抽出
【問題文】図6で“アキレス腱反射”の枠内に「右」「左」の2値が示されている。これが (d)。 - 以上を図1の空欄に当てはめ、解答確定。
誤りやすいポイント
- 網掛けの「空腹時随時種別」「グリカルビン」「TG」「腹囲」などを含めてしまう。
- “目標値”を (a) に入れ忘れ、「検査日」「評価日」のみで止めてしまう。
- “右・左”を個別属性と認識せず、「アキレス腱反射」とだけ書いてしまう。
- (b)(c) を「血液検査」「尿検査」と上位概念で書いてしまう(設問は具体属性名を要求)。
FAQ
Q: なぜ (a) に「患者ID」は含めないのですか?
A: 図1の書式は「関係名(患者ID, (a), …)」と固定されており、患者ID はすでに列挙済みです。従って (a) にはそれ以外の属性を記述します。
A: 図1の書式は「関係名(患者ID, (a), …)」と固定されており、患者ID はすでに列挙済みです。従って (a) にはそれ以外の属性を記述します。
Q: 血液検査に “T-CHO” などがあるのに除外する根拠は?
A: 【問題文】に「図6中の網掛け部分の属性は省略し、それ以外の該当する属性名を記述する」と明記されています。網掛けされている属性は解答対象外です。
A: 【問題文】に「図6中の網掛け部分の属性は省略し、それ以外の該当する属性名を記述する」と明記されています。網掛けされている属性は解答対象外です。
Q: “右”“左”は値に見えるが属性名として良い?
A: 図1の表記では「アキレス腱反射(右,左)」のように測定部位をそのまま属性名として扱います。関係スキーマのレベルでは“右”“左”は列名と同義です。
A: 図1の表記では「アキレス腱反射(右,左)」のように測定部位をそのまま属性名として扱います。関係スキーマのレベルでは“右”“左”は列名と同義です。
関連キーワード: 関数従属性, 第三正規形, 複合キー, 階層属性, データモデリング
設問3:関係“経過・評価”について,(1),(2)に答えよ。
(2)実際の業務では,血液検査と尿検査を同一日に行えない場合があることが判明した。そのような場合に対応するためには,関係 “経過・評価” をどのように変更すればよいか。 変更後の(a)〜(c)に入れる適切な字句を答えよ。模範解答
a:評価日,経過月数,目標値
b:検査日,血糖値,HbA1c
c:検査日,尿糖,尿たん白
解説
解答の論理構成
- 変更前スキーマの確認
- 【問題文】関係 “経過・評価”:
「患者ID, (a), 体重, 体脂肪率, 血液検査((b)), 尿検査((c)), 最終眼科受診日, アキレス腱反射((d))」 - 図6から読み取れる主な従属性
「検査日 → 血液検査」,「検査日 → 尿検査」
- 【問題文】関係 “経過・評価”:
- 業務要件の追加
- 【問題文】「実際の業務では,血液検査と尿検査を同一日に行えない場合がある」
- よって「検査日 → 血液検査 ∧ 尿検査」という従属性が成り立たなくなる。
- スキーマ改変の方針
- “血液検査” と “尿検査” のそれぞれに専用の「検査日」を持たせる。
- 上位から「検査日」を除去し、代わりに“評価” に関係する属性のみを (a) とする。
- (a) の決定
- 図6で “評価” 側に従属している「評価日」「経過月数」「目標値」が上位に残る。
- したがって (a) = 評価日,経過月数,目標値
- (b) と (c) の決定
- “血液検査” サブリレーションの先頭に「検査日」を追加し、代表的な検査値として「血糖値」「HbA1c」を列挙する → (b)。
- “尿検査” も同様に「検査日」を追加し、「尿糖」「尿たん白」を列挙する → (c)。
誤りやすいポイント
- 上位の (a) に「検査日」を残したままにする
→ 同一日に行えないという要件を満たせず失点。 - (b)(c) に「評価日」を入れてしまう
→ 評価関連属性と検査関連属性を混在させると機能従属性が崩れる。 - 検体項目を列挙する際に “HbAlc” の大文字小文字や “尿たん白” の表記を誤記する。
FAQ
Q: なぜ「体重」「体脂肪率」を (a) に入れないのですか?
A: 図6では「体重」「体脂肪率」は「検査日」「評価日」のどちらにも従属せず、中央の枠から直接派生しています。検査日を除いた後も患者イベントごとに一意に管理できるため、上位の固定属性として残します。
A: 図6では「体重」「体脂肪率」は「検査日」「評価日」のどちらにも従属せず、中央の枠から直接派生しています。検査日を除いた後も患者イベントごとに一意に管理できるため、上位の固定属性として残します。
Q: “血液検査” の項目はたくさんあるのに、なぜ (b) は2項目だけ?
A: 設問は「適切な字句」を問うものであり、代表的項目を示せば十分です。機能従属性の観点では「検査日」と検査値を組にすればキーが定まるため、代表値として「血糖値」「HbA1c」を挙げています。
A: 設問は「適切な字句」を問うものであり、代表的項目を示せば十分です。機能従属性の観点では「検査日」と検査値を組にすればキーが定まるため、代表値として「血糖値」「HbA1c」を挙げています。
Q: 「検査日」を2つに分けると冗長では?
A: 各サブリレーションが別日の検査を許容する以上、それぞれにキーとなる「検査日」が必要です。冗長ではなく不可欠な正規化手順です。
A: 各サブリレーションが別日の検査を許容する以上、それぞれにキーとなる「検査日」が必要です。冗長ではなく不可欠な正規化手順です。
関連キーワード: 関数従属性, 正規化, リレーション分解, キー属性, サブリレーション