データベーススペシャリスト試験 2016年 午後101


データベースの設計に関する次の記述を読んで、 設問1〜3に答えよ。

 C社は,主力事業である駐車場の運営が好調で, 現在, 事業の拡大に伴い, 駐車場管理システムを再構築している。 その一環として, 情報システム部のN君がデータベースの設計を行っている。  
〔駐車場の概要〕  駐車場は,個々の自動車を駐車する場所として, 駐車スペース(以下, 車室という)に分けられている。 駐車場は, 月極駐車場と時間貸駐車場のいずれかに分類される。
(1) 月極駐車場: 契約期間を定め, 契約期間中は自由に入出庫できる駐車場  ① 利用できるのは, 契約した会員だけである。  ② 契約は、会員がC社に契約書類を送付して初回の月額利用料金を振り込み, C社がそれらの内容を確認して, 初めて成立する。 (2) 時間貸駐車場: 時間帯別に料金が定められ、利用の都度精算する駐車場  ① 会員でなくても利用することができる。  ② 利用者は、空いている車室に入庫し, 出庫する際に精算機で利用料金を支払う。  ③ 料金は, “月〜金 8:00〜22:00 100 円/20分” のように, 曜日ごと時間帯ごとに定められている。 また, 1日当たりの最大料金又は時間帯当たりの最大料金が定められている場合がある。  
〔会員及びポイントの概要〕  駐車場の利用者は,氏名,住所などの情報を登録して会員になることができる。
(1) 会員登録を行うと, 会員 ID が記載された会員カードとパスワードが発行される。会員は、会員IDとパスワードを使用して, C社の Web サイトの会員専用ページにアクセスすることができる。 (2) 会員には,毎月の支払額(時間貸駐車場で会員カードを提示して支払った支払額+月極駐車場の支払額) に,所定の付与率を乗じて算出されたポイントが付与される。ポイントが付与されると, ポイント付与の基となった支払データに対して, ポイント付与済みであることが記録される。 (3) 会員は,ポイントを消費してポイント交換商品と交換することができる。 交換を行うと, 付与年月が古いポイントから順に消費され, その内容が記録される。  
〔Web サイトの概要〕  C社の Web サイトの利用者は, 駐車場名, 施設名, エリア名などで絞り込んで、駐車場の情報を検索することができる。
(1) 施設とは,Web サイトの地図上に表示され, 検索が可能な建造物である。例えば, 東京駅, 〇〇病院, △△ホテルなどである。 (2) エリアとは, 駐車場及び施設が属する一定の地域である。 例えば,新宿エリア, 横浜エリアなどである。 駐車場及び施設は,いずれか一つのエリアに属する。 (3) 施設の分類をカテゴリという。 例えば, 駅, 病院, ホテルなどである。 施設は,いずれか一つのカテゴリに属する。 (4) 駐車場から徒歩圏内にある主要な施設を周辺施設という。 駐車場には,一つ又は複数の周辺施設が定められている。一つの施設は,複数の駐車場の周辺施設として定められる場合がある。  
 会員専用ページでは, 駐車場利用履歴の閲覧, ポイント付与履歴の閲覧, ポイントの交換, ポイント交換履歴の閲覧などを行うことができる。 ポイント付与履歴画面の例を図1に, ポイント交換履歴画面の例を図2に示す。   データベーススペシャリスト試験(平成28年 午後I 問1 図1)
〔データモデルの設計 〕  N君は, 概念データモデル (図3) 及び関係スキーマ (図4) の設計を行った。
データベーススペシャリスト試験(平成28年 午後I 問1 図3)
データベーススペシャリスト試験(平成28年 午後I 問1 図4)
 図4の関係スキーマの主な属性とその意味制約を, 表1に示す。
データベーススペシャリスト試験(平成28年 午後I 問1 表1)

データベースの設計に関する次の記述を読んで、 設問1〜3に答えよ。

設問1関係“周辺施設” について,(1),(2)に答えよ。

(1)関係“周辺施設” の候補キーを全て答えよ。 また, 部分関数従属性, 推移的関数従属性の有無を, “あり” 又は “なし”で答えよ。 “あり” の場合は,その関数従属性の具体例を一つ, 次の表記法に従って示せ。 データベーススペシャリスト試験(平成28年 午後I 問1 設問1-1)  なお,候補キー及び表記法に示されている属性1 属性2が複数の属性から構成される場合は,{}でくくること。

模範解答

候補キー:{ 施設ID, 駐車場ID }, { 施設経度, 施設緯度, 駐車場ID } 部分関数従属性の有無:あり 推移的関数従属性の有無:あり 部分関数従属性:施設ID → 施設名         施設ID → カテゴリコード         施設ID → 施設エリアコード 推移的関数従属性:施設ID → カテゴリコード → カテゴリ名

解説

解答の論理構成

  1. 周辺施設関係の構造把握
    • 施設⇔駐車場が多対多で結合し、関係に “所要時間” などの関係属性を持つ。
  2. 施設側の一意性
    • 【表1】より「施設緯度,施設経度…経度及び緯度を組み合わせた位置上に、駐車場又は施設が複数存在することはない。」
    • したがって (施設経度, 施設緯度) または 施設ID が施設の候補キー。
  3. 周辺施設レコードの一意化
    • 【問題文】①より同一施設が複数の駐車場にひも付く。施設識別子だけでは関係行が重複するため、駐車場ID を加える必要がある。
    • ゆえに候補キーは
      { 施設ID, 駐車場ID }{ 施設経度, 施設緯度, 駐車場ID }
  4. 部分関数従属性の判定
    • 候補キーが複合で、その一部 施設ID にのみ従う属性がある。例:
      施設ID → 施設名施設ID → カテゴリコード施設ID → 施設エリアコード
    • よって“あり”。
  5. 推移的関数従属性の判定
    • さらに 施設ID → カテゴリコード かつ カテゴリコード → カテゴリ名 が成り立つ。
    • これは 施設ID → カテゴリコード → カテゴリ名 の推移従属であり“あり”。
  6. 以上より模範解答の内容を導出できる。

誤りやすいポイント

  • “施設ID は一意だからキーは施設ID だけで良い”と早合点し、駐車場との多対多を失念する。
  • “経度+緯度が一意”の記述を読み飛ばし第2の候補キーを落とす。
  • “カテゴリ名”の依存関係を部分従属と誤答(正しくは推移従属)。
  • 部分従属の表記で { 施設ID, 駐車場ID } → 施設名 と書き、部分従属であることを示せていない。

FAQ

Q: 「周辺施設」に “所要時間” が入っているのに候補キーに含めなくて良いのですか?
A: はい。所要時間は駐車場と施設の対応関係が決まった後で決まる従属属性であり、識別に必要ありません。
Q: カテゴリコード を候補キーに使えないのはなぜ?
A: 1つのカテゴリに複数施設が属します。カテゴリだけでは施設を特定できないため候補キーにはなりません。
Q: 第3正規形にする場合の分割は?
A: 部分従属を解消して「施設」と「カテゴリ」を独立表にし、周辺施設関係にはキーだけを残すことで第3正規形に正規化できます。

関連キーワード: 正規化, 候補キー, 部分関数従属性, 推移的関数従属性, 関係スキーマ

設問1関係“周辺施設” について,(1),(2)に答えよ。

(2)関係 “周辺施設” は, 第1正規形, 第2正規形, 第3正規形のうち, どこまで正規化されているか答えよ。 また, 第3 正規形でない場合は,第3正規形に分解し, 主キー及び外部キーを明記した関係スキーマを示せ。

模範解答

カテゴリ(カテゴリコード, カテゴリ名) 施設(施設ID, 施設名, 施設緯度, 施設経度, カテゴリコード, 施設エリアコード) 周辺施設(駐車場ID, 施設ID, 所要時間)

解説

解答の論理構成

  1. 主キーの把握
    【問題文】の関係 “周辺施設” には “駐車場ID, 施設ID, 所要時間” が含まれます。駐車場と施設の組み合わせごとに “所要時間” が一意に決まるため,
    主キー候補=“駐車場ID+施設ID” です。
  2. 部分関数従属の確認(2NF 判定)
    “施設ID → 施設名, 施設緯度, 施設経度, 施設エリアコード, カテゴリコード” が成り立ち,これらは主キーの一部(施設ID)のみに従属します。
    よって 第2正規形を満たさない
  3. 推移関数従属の確認(3NF 判定)
    さらに “カテゴリコード → カテゴリ名” があり,非キー属性間での推移従属が発生します。従って 第3正規形も未達 となります。
  4. 分解手順
    (i) “施設ID” が決める属性を切り離し,関係 施設 を生成
    (ii) “カテゴリコード → カテゴリ名” を分離し,関係 カテゴリ を生成
    (iii) 残りを “周辺施設” とし,主キーを “駐車場ID+施設ID” に保持
  5. 外部キー定義
    ・施設.カテゴリコード は カテゴリ.カテゴリコード への外部キー
    ・施設.施設エリアコード は エリア.エリアコード への外部キー(【問題文】“駐車場及び施設は,いずれか一つのエリアに属する。”)
    ・周辺施設.施設ID は 施設.施設ID への外部キー
    ・周辺施設.駐車場ID は 駐車場.駐車場ID への外部キー
    以上で全属性が主キーに完全従属し,非キー属性間の推移従属が排除され,第3正規形が達成されます。

誤りやすいポイント

  • “カテゴリ名” を独立させず 施設 の列に残してしまい推移従属を温存する
  • 主キーを誤って “駐車場ID+施設ID+カテゴリコード” としてしまい,部分従属を見落とす
  • 所要時間 が “駐車場ID+施設ID” に従属することを忘れ,別表に分けてしまう
  • 外部キーを明示せず減点される

FAQ

Q: “第2正規形” だけを満たす設計ではダメでしょうか?
A: ダメです。推移従属 “カテゴリコード → カテゴリ名” が残り,第3正規形の要件「非キー属性はキーに対してのみ従属」を破るためです。
Q: “施設エリアコード” はなぜ 施設 表に置くのですか?
A: 【問題文】“駐車場及び施設は,いずれか一つのエリアに属する。” とあるため,施設ごとに一意に決まる属性であり,主キーに部分従属するので 施設 表に移す必要があります。
Q: 経度・緯度は位置変更があると書かれていますが,正規化に影響しますか?
A: 更新可否は関係なく,関数従属の有無で判断します。経度・緯度は “施設ID → 施設緯度, 施設経度” の従属を持つため,施設表にまとめるのが正規化の観点から妥当です。

関連キーワード: 正規化, 第1正規形, 第2正規形, 第3正規形, 関数従属

設問2図3, 4 について(1),(2)に答えよ。

(1)図4中の(a)〜(e)に入れる適切な属性名を答えよ。 また, 主キー又は外部キーを構成する属性の場合、 主キーを表す実線の下線, 又は外部キーを表す破線の下線を付けること。(b, cは順不同)

模範解答

a:駐車場エリアコード b:駐車場ID c:会員ID d:ポイント付与フラグ e:会員ID

解説

解答の論理構成

  1. (a) の決定
    • 引用: “駐車場及び施設は,いずれか一つのエリアに属する。”
    • 駐車場が属するエリアを示す列が必要。表1に “エリアコード” が提示されているため、駐車場表には “駐車場エリアコード” を追加し外部キーにするのが自然。
  2. (b)(c) の決定
    • 引用: “契約期間を定め…契約は、会員がC社に契約書類を送付して…初めて成立する。”
    • 契約は “月極駐車場”(=駐車場)と “会員” の組合せで一意。よって “駐車場ID” と “会員ID” を外部キーとして格納。
  3. (d) の決定
    • 引用: “ポイントが付与されると, ポイント付与の基となった支払データに対して, ポイント付与済みであることが記録される。”
    • 月極駐車場利用には支払額があるため、当該行に “ポイント付与フラグ” を置き、付与済み状態を保持。
  4. (e) の決定
    • 引用: “会員は,毎月の支払額(時間貸駐車場で会員カードを提示して支払った支払額+… )”
    • 時間貸しの場合、利用レコードは非会員利用も含むため、会員である場合のみ関連付けが必要。橋渡し表 “会員時間貸駐車場利用” に “会員ID” を持たせ、元の利用連番と組み合わせて主キー/外部キーとする。

誤りやすいポイント

  • 駐車場表に “エリアコード” でなく “エリア名” を入れてしまう(正規化違反)。
  • (b)(c) の順序を固定と誤認し、片方だけ下線を忘れる。
  • “ポイント付与フラグ” をポイント付与表へ入れてしまい、支払レコード側との紐付けが取れなくなる。
  • “会員時間貸駐車場利用” に “会員ID” が既にあると勘違いし、別の属性を探してしまう。

FAQ

Q: “駐車場エリアコード” と “エリアコード” は同じ意味ですか?
A: 値は同じですが、駐車場表内でエリアを示す役割なので “駐車場エリアコード” という業務名で定義し、外部キーとして “エリア” 表の “エリアコード” を参照します。
Q: “ポイント付与フラグ” をブール型にすれば別表は不要ですか?
A: 付与履歴は別表 “ポイント付与” に保管し、支払側には状態フラグだけを持たせることで可読性と整合性を両立します。
Q: 契約表に “契約番号” が主キーなら “駐車場ID”“会員ID” は複合主キーにしませんか?
A: “契約番号” で一意に識別できるため主キーは単一列。ただし “駐車場ID” “会員ID” は外部キーであり、ビジネスルール上も必須列として保持します。

関連キーワード: 正規化, 外部キー制約, 概念データモデル, ブリッジテーブル

設問2図3, 4 について(1),(2)に答えよ。

(2)図3中のエンティティタイプ間のリレーションシップを全て記入せよ。 なお、図に表示されていないエンティティタイプは考慮しなくてよい。また, エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。

模範解答

データベーススペシャリスト試験(平成28年 午後I 問1 設問2-2解答)

解説

解答の論理構成

  1. 契約主体の特定
    【問題文】月極駐車場では「契約は、会員がC社に…成立する」とあり、契約と会員は一対多です。関係スキーマでも「月極駐車場契約(契約番号, (b))」の(b)が“会員ID”であることから、リレーションシップ①「会員―月極駐車場契約」が確定します。
  2. 月極関連の流れ
    月極駐車場契約は駐車場側に帰属するため、図4の外部キー(c)=“駐車場ID”より②「月極駐車場―月極駐車場契約」。さらに支払い明細を表す「月極駐車場利用」が契約番号を持つので③「月極駐車場契約―月極駐車場利用」が派生します。
  3. 駐車場のIS-A
    【問題文】「駐車場は, 月極駐車場と時間貸駐車場のいずれかに分類される。」とあり、図3でも三角記号で表されているため④「駐車場⇢月極駐車場」「駐車場⇢時間貸駐車場」のIS-A関係を採用します。
  4. 時間貸し利用のパス
    時間貸し精算は駐車場単位で行われるので、外部キー「時間貸駐車場利用(駐車場ID, 利用連番, …)」より⑤「時間貸駐車場―時間貸駐車場利用」。
  5. 会員による時間貸し利用の枝分かれ
    「会員でなくても利用することができる。」が前提ですが、会員カード提示時のみ別途ポイント管理を行うため、図3では時間貸駐車場利用を汎化/特化して「会員時間貸駐車場利用」を派生させています。したがって⑥「時間貸駐車場利用⇢会員時間貸駐車場利用」。あわせて会員IDを保持するので⑦「会員―会員時間貸駐車場利用」。
  6. 料金パターンと曜日
    【問題文】「料金は, “月〜金 8:00〜22:00 100 円/20分” のように, 曜日ごと時間帯ごとに定められている。」図4では「時間帯別料金パターン」と「時間帯別料金設定曜日」に分け、前者が駐車場IDの外部キー、後者が(駐車場ID, パターン番号)の外部キーを持つため⑧「時間貸駐車場―時間帯別料金パターン」、⑨「時間帯別料金パターン―時間帯別料金設定曜日」で完結します。

誤りやすいポイント

  • 「会員時間貸駐車場利用」を独立した利用実績と誤解し、二重に駐車場を参照させる
  • 駐車場から月極/時間貸を単なる1対多と考え、IS-Aを描かない
  • 「時間帯別料金設定曜日」→「時間帯別料金パターン」の従属方向を逆にしてしまう
  • 月極契約と月極利用の順序(契約→利用)を逆に描く

FAQ

Q: 会員でなくても時間貸を利用できるのに「会員時間貸駐車場利用」があるのはなぜですか?
A: 【問題文】で「会員カードを提示して支払った支払額」がポイント付与対象になるからです。会員が関与した利用のみ追加データが必要なため、一般の「時間貸駐車場利用」を特化させています。
Q: IS-A と1対多の見分け方は?
A: 「分類される」「いずれかに該当する」という表現はIS-A(汎化/特化)を示します。一方、「複数を持つ」「〜ごとに」という表現は1対多を疑います。図4で主キーを共有しているかどうかも判断材料になります。
Q: 時間帯別料金で曜日を別テーブルに分けた理由は?
A: 曜日区分は多値属性になり得るため、第1正規形を満たすよう「時間帯別料金設定曜日」に分離し、(駐車場ID, パターン番号)ごとに複数行で表現できるようにしています。

関連キーワード: ER図, 多値属性, 汎化特化, 外部キー, 第1正規形

設問3関係 “ポイント付与”, “ポイント交換” について,(1),(2)に答えよ。

(1)関係 “ポイント付与”, “ポイント交換” には, ポイント管理上の不具合がある。 不具合の内容を50字以内で具体的に述べよ。

模範解答

複数月のポイントを合算して交換する場合でも、ポイントは古い付与年月から順に消費し、未消費残高を正確に管理する。

解説

解答の論理構成

  1. 業務要件の確認
    • 【問題文】「交換を行うと, 付与年月が古いポイントから順に消費され, その内容が記録される。」
      ⇒ 交換 1 件で複数の “付与年月” が対象になり得る。
  2. 現在の関係スキーマ
    • “ポイント付与(会員ID, 付与年月, 付与ポイント)”
    • “ポイント交換(会員ID, 交換年月日, 付与年月, 商品コード, 数量)”
      ⇒ 交換 1 件につき “付与年月” を 1 つしか保持できない。
  3. 発生する不具合
    • 例)300pt 消費で “2015-04”250pt と “2015-05”50pt を使うケース
      • “商品コード” と “数量” は 1 行にまとめたい。
      • しかし “付与年月” を 2 つ登録できず、どちらかが欠落。
    • 結果
      • “ポイント付与” 残高が正しく減算できない。
      • 画面例の「残ポイント」計算も不正確になる。
  4. したがって
    「複数月分ポイントを 1 回で消費する場合に付与年月別の消費額を保持できない」ことが不具合である。

誤りやすいポイント

  • 商品コードや数量があるから消費ポイントは算出可能と考え、付与年月の多重性を見落とす。
  • 残ポイント列を“動的計算すれば良い”と誤解し、月別消費履歴の欠如を見逃す。
  • “付与年月”を NULL 可にすれば解決できると思い込むが、多対多構造の欠陥は残る。

FAQ

Q: “消費ポイント”列を追加すれば解決しますか?
A: いいえ。列を追加しても 1 行に 1 付与年月しか記録できない構造は変わらず、多月分引当ては表現できません。
Q: 別リレーションで“ポイント消費明細”を作る方法は?
A: “交換ID”を PK にした父表と、“付与年月・消費ポイント”を持つ子表を用意すれば、多月分の消費履歴を正規化して管理できます。

関連キーワード: 正規化, 主キー設計, 多対多関係, 在庫引当

設問3関係 “ポイント付与”, “ポイント交換” について,(1),(2)に答えよ。

(2)(1)の不具合を解決するために, 関係 “ポイント交換” の属性を一つ削除し, 新たな関係 “ポイント消費” を追加することにした。  (a)関係“ポイント交換” から削除する属性の属性名を答えよ。  (b)関係 “ポイント消費” の属性名を, 表2の行(b)の各列に本文又は図表中の用語を用いて記入せよ。 また, 主キー又は外部キーを構成する属性の場合, 主キーを表す実線の下線, 又は外部キーを表す破線の下線を付けること。     なお,表2の行(b)の列が全て埋まるとは限らない。  (c)図1及び図 2 に表示されているポイントは,関係 “ポイント消費”ではどのような値となるか。 その値を, 表2の行(b)に記入した属性と同じ列に対応付くように, 表2の(c)の各行及び各列に記入せよ。     なお,表2の(c)の行が全て埋まるとは限らない。 データベーススペシャリスト試験(平成28年 午後I 問1 設問3-2)

模範解答

データベーススペシャリスト試験(平成28年 午後I 問1 設問3-2解答)

解説

解答の論理構成

  1. 不具合の確認
    【問題文】「付与年月が古いポイントから順に消費される」ため、1 回の交換で複数の “付与年月” が関与する。現行 “ポイント交換(会員ID, 交換年月日, 付与年月, 商品コード, 数量)” では “交換年月日” が重複し更新・削除時異常が発生。
  2. 削除すべき属性
    重複の原因は “付与年月” なので (a) は “付与年月”
  3. 新関係の構築
    交換と付与を N:M で結び付ける橋渡し表として “ポイント消費” を追加。
    ・交換側 FK: (会員ID, 交換年月日) ― “ポイント交換”
    ・付与側 FK: (会員ID, 付与年月) ― “ポイント付与”
    ・消費量を保持: “消費ポイント”
    ・一意性確保: (付与年月, 交換年月日, 消費ポイント) を主キーとし、会員ID は外部キーのみに留める。
  4. 具体データ展開
    【図1】【図2】より各交換での消費内訳を計算。
    ・2015-06-10 に 300pt 消費 → 2015-04 から 250pt、2015-05 から 50pt
    ・2015-07-20 に 100pt 消費 → 2015-05 から 10pt、2015-06 から 90pt
    これを “ポイント消費” 4 行に分解。

誤りやすいポイント

  • “消費ポイント” を “ポイント交換” に残してしまい、依然として重複行が発生する。
  • 主キーに “会員ID” を含め忘れ、外部キー制約と整合しない設計にしてしまう。
  • 「古いポイントから消費」というビジネスルールを ER 設計の必須要件と取り違え、物理的に順序属性を追加してしまう。

FAQ

Q: “消費ポイント” を主キーに含める理由は?
A: 1 つの “付与年月” と “交換年月日” の組合せで複数行を許さないためです。同じ組合せで消費量が異なる 2 行が登録されることはないので一意性が確保できます。
Q: “ポイント消費” に “商品コード” は不要?
A: “商品コード” は “ポイント交換” に残ります。交換ごとに商品が決まるので、付与月単位の “ポイント消費” には含めません。
Q: “ポイント付与” の主キーは?
A: 【図4】で “ポイント付与(会員ID, 付与年月, 付与ポイント)” と定義されています。会員ごとの付与月で一意に識別し、付与ポイントは非キー属性です。

関連キーワード: 正規化, 主キー, 外部キー, 多対多関係, 更新異常
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ