データベーススペシャリスト試験 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(1)関係“周辺施設” について,(1),(2)に答えよ。

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

1. 模範解答のキーワード・論点整理

項目キーワード・論点
候補キー{施設ID, 駐車場ID} / {施設経度, 施設緯度, 駐車場ID}
部分関数従属性あり(例:施設ID → 施設名 など)
推移的関数従属性あり(例:施設ID → カテゴリコード → カテゴリ名)
根拠①問題文の「駐車場には,一つ又は複数の周辺施設が定められ…一つの施設は,複数の駐車場の周辺施設として定められる場合がある」
②表1の緯度・経度に関する制約「同一位置に複数の施設は存在しない」

2. なぜその解答になるのか ― 論理的な導出手順

2.1 周辺施設表(カテゴリコード, カテゴリ名, 施設ID, 施設エリアコード, 施設名, 駐車場ID, 所要時間, 施設経度, 施設緯度)の意味を整理

  1. “駐車場” ↔ “施設” は多対多(問題文 4. より)。
  2. 周辺施設表は「ある駐車場とある施設の“関係”」を保持し,徒歩所要時間はこの関係の属性。
  3. 施設そのものを識別するのは 施設ID(文字列)または 施設経度+施設緯度(位置が一意)のいずれか。
  4. しかし 1. の通り,同じ施設が複数駐車場にひも付くため,施設を識別するだけでは行を一意に決められない。

2.2 候補キーの検討

  1. 施設ID は施設を一意に識別。
  2. 駐車場ID は駐車場を一意に識別。
  3. 従って {施設ID, 駐車場ID} なら 1 行に一意。
  4. 緯度経度にも「同一位置に複数施設は存在しない」制約があるので,施設経度+施設緯度 ≒ 施設ID と同格の識別力。よって {施設経度, 施設緯度, 駐車場ID} も候補キー。
  5. 逆に {施設ID} だけ,{施設経度, 施設緯度} だけ では候補キーにならない (多対多の片側)。

2.3 部分関数従属性の有無

主キーを {施設ID, 駐車場ID} と決めた場合,
  • 施設ID → 施設名
  • 施設ID → カテゴリコード
  • 施設ID → 施設エリアコード
    いずれも「主キーの部分(施設ID)」だけで決まる ⇒ 部分関数従属性あり

2.4 推移的関数従属性の有無

さらに,
  • 施設ID → カテゴリコード → カテゴリ名
    のように,中間属性(カテゴリコード)を経由して最終属性が決まる ⇒ 推移的関数従属性あり
【引用】
(4) 施設の分類をカテゴリという。…施設は,いずれか一つのカテゴリに属する。
これが「カテゴリコード → カテゴリ名」という決定性を裏付けている。

3. 受験者が誤りやすいポイント

誤りやすい箇所ありがちな誤答なぜ間違うか/正しい考え方
候補キーを 施設ID だけにしてしまう{施設ID}多対多関係という条件を見落とすと「施設IDで一意」と早合点しやすい。駐車場という相手側の識別子が必要。
部分関数従属性なしと答えるなし「施設ID と 駐車場ID どちらも主キーだから依存先が2属性になる」と思い込み,一属性だけで決まるものを見逃す。
推移的関数従属性を見落とすなし“カテゴリコード → カテゴリ名” の業務ルールを忘れがち。説明文(4)を必ず確認すること。
緯度・経度をキーとしない{施設経度, 施設緯度}緯度経度は施設自体を一意にするが,「駐車場との関係」は識別できない。駐車場IDも必要。

4. 試験対策として覚えておきたいポイント

  1. 「多対多」を“関係エンティティ”で表すときは,両側の主キーを合わせないとレコードは一意にならない。
  2. 図や文章に「一つ又は複数」「属する」などの表現があれば,カーディナリティ(1:1, 1:N, N:M)のヒントになる。
  3. 緯度・経度のように「位置が一意」と書かれている場合は,自然キー候補になる。
  4. 部分関数従属性・推移的関数従属性のチェックは「①主キーを分解し片方で決まる物はないか」「②中間属性を経由して決まる物はないか」の2段階で行うと漏れにくい。
  5. 3NF への正規化では
    • 候補キーを決める
    • 部分関数従属性 → 第1正規形違反
    • 推移的関数従属性 → 第2正規形違反
      と段階的に考えると整理しやすい。
これらの観点で過去問を繰り返し解き,文章中のヒントを素早く拾えるように練習してください。

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

関係 “周辺施設” は, 第1正規形, 第2正規形, 第3正規形のうち, どこまで正規化されているか答えよ。 また, 第3 正規形でない場合は,第3正規形に分解し, 主キー及び外部キーを明記した関係スキーマを示せ。
模範解答
カテゴリ(カテゴリコード, カテゴリ名) 施設(施設ID, 施設名, 施設緯度, 施設経度, カテゴリコード, 施設エリアコード) 周辺施設(駐車場ID, 施設ID, 所要時間)
解説

1.核心となるキーワード・論点整理

  • 関係「周辺施設」の属性
    周辺施設(カテゴリコード、カテゴリ名、施設ID、施設エリアコード、施設名、駐車場ID、所要時間、施設緯度、施設経度)
  • 主キー候補
    駐車場と施設の多対多関係を表すので、〈駐車場ID, 施設ID〉が主キー
  • 正規化の要件
    • 第1正規形(1NF):集合的属性や繰り返し属性を排除
    • 第2正規形(2NF):主キーの部分集合に対する従属性(部分従属)を排除
    • 第3正規形(3NF):非キー属性間の推移的従属性を排除
  • 分解後の関係スキーマ(モデル解答)
    • カテゴリ(カテゴリコードカテゴリ名)
    • 施設(施設ID施設名, 施設緯度, 施設経度, カテゴリコード, 施設エリアコード)
    • 周辺施設(駐車場ID, 施設ID所要時間)

2.なぜその解答になるのか

(1) 主キーと関数従属性の確認

問題文より
「駐車場には,一つ又は複数の周辺施設が定められている。一つの施設は,複数の駐車場の周辺施設として定められる場合がある。」
という記述から,多対多の関係を表す関係スキーマであることがわかります。
したがって主キーは〈駐車場ID, 施設ID〉の組合せとします。

(2) 第1正規形の判定

  • 繰り返し属性や集合属性は含まれておらず,スカラ値のみ
    → 第1正規形を満たす

(3) 第2正規形の判定

第2正規形では,「非キー属性が主キーの一部にのみ従属していないこと」が必要です。
ここで,関係「周辺施設」には
  • 施設名, 施設緯度, 施設経度, カテゴリコード, カテゴリ名, 施設エリアコード
    といった属性があり,これらは「施設ID」のみに機能的従属します。
    → 非キー属性が主キーの一部(施設ID)に対して部分従属しているため,第2正規形を満たさない

(4) 第3正規形の判定

2NFを満たしていないので,第3正規形も当然満たさない。ただし,整理すると:
  • 施設ID → 施設名, 施設緯度, 施設経度, カテゴリコード, 施設エリアコード
  • カテゴリコード → カテゴリ名
  • 施設エリアコード → (エリア名など)
非キー属性間の推移的従属も存在します。

(5) 第3正規形への分解

以上を受け,以下のように分解します。
リレーション名主キー属性外部キー
カテゴリカテゴリコードカテゴリ名
施設施設ID施設名, 施設緯度, 施設経度,カテゴリコード
カテゴリコード, 施設エリアコード(施設→カテゴリ)
周辺施設駐車場ID, 施設ID所要時間駐車場ID(駐車場表参照),
施設ID(施設表参照)
  • まず「カテゴリコード→カテゴリ名」に分離し,関係 カテゴリ(カテゴリコード, カテゴリ名) を作成
  • 次に,「施設ID→(施設属性)」と「カテゴリコード」などを格納する 施設(施設ID, 施設名, 施設緯度, 施設経度, カテゴリコード, 施設エリアコード)
  • 最後に多対多関係と固有属性(所要時間)だけを残し,周辺施設(駐車場ID, 施設ID, 所要時間) とする

3.受験者が誤りやすいポイント

  • 主キーの設定ミス
    「施設IDのみ」や「駐車場IDのみ」を主キーとしてしまい,正しい候補キーを取りこぼす
  • 2NFと3NFの判定混同
    部分従属性と推移的従属性の違いをあいまいに覚えている
  • 実体(施設、カテゴリ)と関係(周辺施設)を一つの表にまとめたままにする
    M:N関係の表現方法として,必ず中間表を用いる

4.試験対策まとめ

  1. 関数従属性を洗い出し,主キー候補と比較する
  2. 各正規形の要件を手順でチェック
    • 1NF:スカラ値であるか
    • 2NF:部分従属性の有無
    • 3NF:推移的従属性の有無
  3. 分解手順を身につける
    • 部分従属性を排除 → 中間表を作成
    • 推移的従属性を排除 → 実体ごとの表を分離
  4. 過去問を用い,主キー設定→FD→正規形判定→分解 の流れを反復して練習することで,本番でもスムーズに対応できるようにしておきましょう。

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

図4中の(a)〜(e)に入れる適切な属性名を答えよ。 また, 主キー又は外部キーを構成する属性の場合、 主キーを表す実線の下線, 又は外部キーを表す破線の下線を付けること。(b, cは順不同)
模範解答
a:駐車場エリアコード b:駐車場ID c:会員ID d:ポイント付与フラグ e:会員ID
解説

キーワードと論点整理

本問は,図4の未定義欄 (a)~(e) に,概念データモデルの記述内容から「どの属性(カラム)を置くべきか」を判断し,さらに主キー/外部キーである場合は下線(外部キーは破線)を付ける問題です。
主な論点は以下のとおりです。
  • 駐車場は「いずれか一つのエリアに属する」 → 駐車場テーブルにエリアコードを持たせる
  • 月極駐車場契約は「会員」と「月極駐車場」に紐づく → 契約テーブルに会員ID・駐車場IDを持たせる
  • 会員時間貸駐車場利用は「会員による時間貸駐車場利用を記録」 → 会員IDを持たせる
  • ポイント付与フラグは「支払額に対してポイント付与済みかどうかを識別」 → 利用テーブルにそのままフラグを持たせる

解答一覧

項目属性名主キー/外部キー
(a)駐車場エリアコード外部キー
(b)駐車場ID外部キー
(c)会員ID外部キー
(d)ポイント付与フラグ(通常属性)
(e)会員ID外部キー
※(b),(c) は順不同。

解答の理由付け

  1. (a) 駐車場エリアコード
    「駐車場及び施設は,いずれか一つのエリアに属する」(問題文)ため,
    駐車場テーブルにエリアを参照する外部キーとして 駐車場エリアコード を持たせます。
    駐車場(駐車場ID, 駐車場名, …, 駐車場経度, 駐車場緯度, ──駐車場エリアコード──)
    
  2. (b),(c) 月極駐車場契約テーブル
    月極契約は「会員が … 契約書類を送付して … 契約が成立する」「会員だけが利用できる月極駐車場」であるため,
    契約レコードはどの会員のどの駐車場契約かを識別できるよう
    • 駐車場ID(どの駐車場か)
    • 会員ID(どの会員の契約か)
      を外部キーとして持ちます。
    月極駐車場契約(契約番号, ──駐車場ID──, ──会員ID──, 契約開始日, 契約終了日)
    
  3. (d) ポイント付与フラグ
    「支払額に対してポイント付与済みかどうかを識別するフラグ」(表1)をそのまま利用し,
    ポイントを付与したかどうかを保持する通常属性として ポイント付与フラグ を配置します。
  4. (e) 会員ID
    「会員が時間貸駐車場を利用するときにポイント付与する/しないを判断」(問題文)ため,
    会員の時間貸駐車場利用を記録するテーブルに 会員ID を外部キーで持たせます。
    会員時間貸駐車場利用(駐車場ID, 利用連番, ──会員ID──, ポイント付与フラグ)
    

誤りやすいポイント

  • (a) を「施設エリアコード」としてしまう
    ⇒ 駐車場テーブルの文脈なので 駐車場 のエリアコード。
  • (b),(c) の順序
    ⇒ 順不同なので「どちらが先でも可」ですが,両方とも外部キー である点を押さえる。
  • (d) を主キーや外部キー扱いしてしまう
    ⇒ 「フラグ」は参照キーではなく情報保持用の通常属性。
  • (e) と (d) の混同
    ⇒ 時間貸利用テーブルには「利用者(会員)を示す会員ID」と「付与済みフラグ」の両方を持つ。

試験対策としてのまとめ

  1. 概念モデルの関係を関係スキーマ上で外部キーとして実装
    • 1対多:多側に親の主キーを外部キー
    • 多対多:中間テーブルで両側の外部キー
  2. 問題文中の制約・意味を正確に拾う
    • 「いずれか一つに属する」→必ず外部キー制約
    • 「識別するコード・番号」は主キーか外部キー
  3. 属性名をそのまま正確に引用
    • 試験では表1などに示される名称を正確に記述すること
    • 誤字・略称を避ける
  4. 主キー/外部キーの下線記法を覚える
    • 主キー:実線下線
    • 外部キー:破線下線
これらを意識して設問文を丁寧に読み取り,概念とスキーマ対応を正確に行ってください。

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

図3中のエンティティタイプ間のリレーションシップを全て記入せよ。 なお、図に表示されていないエンティティタイプは考慮しなくてよい。また, エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。
模範解答
データベーススペシャリスト試験(平成28年 午後I 問1 設問2-2解答)
解説

キーワードと論点整理

本設問は,「図3」の概念データモデル(未完成)において,表示されているエンティティタイプ間のリレーションシップを補完する問題です。
概念データモデルでは,業務ルールに従ってエンティティ同士を結びつける必要があります。
主な論点は以下のとおりです。
論点内容
エンティティの把握図3に登場するエンティティタイプ10種を正しく列挙できているか
業務ルールの対応関係の把握問題文の記述から,誰が誰を契約・利用・設定するのかを明示できるか
属性の有無にとらわれない関係スキーマに属性がないからといってリレーションを省略しない

解答の理由・論理的解説

以下,業務ルールの該当箇所を原文引用しつつ,関係性を導出します。
1.会員 – 月極駐車場契約
 問題文より
 > 「② 契約は、会員がC社に契約書類を送付して … 初めて成立する。」
 → 会員は「月極駐車場契約」を締結するので,両者を結ぶ。
2.月極駐車場 – 月極駐車場契約
 問題文より
 > 「月極駐車場: 契約期間を定め … 」
 → 「月極駐車場契約」はどの駐車場への契約かを示すので,両者を結ぶ。
3.月極駐車場契約 – 月極駐車場利用
 問題文より
 > 「(1) 月極駐車場: 契約期間中は自由に入出庫できる」
 → 利用記録(月極駐車場利用)は,契約ごとに発生するので,両者を結ぶ。
4.会員 – 会員時間貸駐車場利用
 問題文より
 > 「時間貸駐車場① 会員でなくても利用することができる。」
 > 「(1) 会員は,**会員ID とパスワードを使用して … 」
 → 会員が時間貸駐車場を会員カード提示で利用した場合を「会員時間貸駐車場利用」で管理するので,両者を結ぶ。
5.時間貸駐車場 – 会員時間貸駐車場利用
 問題文より
 > 「(2) 利用者は … 空いている車室に入庫し … 」
 → 「会員時間貸駐車場利用」レコードはどの駐車場での利用かを示すので,両者を結ぶ。
6.時間貸駐車場 – 時間貸駐車場利用
 問題文より
 > 「(2) 利用者は … 出庫する際に精算機で利用料金を支払う。」
 → 非会員も含めた時間貸駐車場全体の利用記録「時間貸駐車場利用」を管理するので,両者を結ぶ。
7.時間貸駐車場利用 – 会員時間貸駐車場利用
 業務構造から
 → 会員がカード提示した利用のみを「会員時間貸駐車場利用」として別管理するので,両者を結ぶ。
8.時間貸駐車場 – 時間帯別料金パターン
 問題文より
 > 「(3) 料金は “月〜金 8:00〜22:00 100 円/20分” のように … 」
 → 料金パターンを駐車場ごとに複数管理するので,両者を結ぶ。
9.時間帯別料金パターン – 時間帯別料金設定曜日
 問題文より
 > 「(3) 料金は曜日ごと時間帯ごとに定められている。」
 → パターンごとに適用曜日を登録するので,両者を結ぶ。
10.時間貸駐車場利用 – 時間帯別料金パターン
 業務構造から
 → 実際の利用はどの料金パターンによって算出されたかを関連付けるため,両者を結ぶ。

関係性一覧

エンティティAリレーションシップエンティティB
会員— 締結する —月極駐車場契約
月極駐車場— 契約を受け入れる —月極駐車場契約
月極駐車場契約— 利用記録を持つ —月極駐車場利用
会員— 利用記録を持つ —会員時間貸駐車場利用
時間貸駐車場— 会員利用記録を持つ —会員時間貸駐車場利用
時間貸駐車場— 利用記録を持つ —時間貸駐車場利用
時間貸駐車場利用— 会員利用詳細を持つ —会員時間貸駐車場利用
時間貸駐車場— 料金パターンを定義する —時間帯別料金パターン
時間帯別料金パターン— 適用曜日を持つ —時間帯別料金設定曜日
時間貸駐車場利用— 適用パターンを記録する —時間帯別料金パターン

受験者が誤りやすいポイント

  1. 属性の有無に引きずられない
    「時間貸駐車場利用」リレーションスキーマにパターン番号の属性がないので,「時間帯別料金パターン」への関係を忘れやすい。
    → 業務ルールからパターンを参照する必要性を常に意識すること。
  2. 会員利用と非会員利用の切り分け
    「時間貸駐車場利用」と「会員時間貸駐車場利用」の2つの利用エンティティを混同しやすい。
    → 問題文の「会員カードを提示して支払った支払額」は専用の管理が必要であると示されている点を見落とさない。
  3. サブタイプ(駐車場区分)と契約・利用の関連
    駐車場を「月極/時間貸」に分けたサブタイプ設計が示されているが,サブタイプ間のリレーションを考慮し忘れることがある。
    → 「駐車場 → 月極駐車場契約/時間貸駐車場利用」のフローを常に整理する。

試験対策:覚えておくべきポイント

  1. 業務ルールから概念モデルを描く
    画面例や属性一覧だけでなく,「誰が」「何を」「どのように」行うかの記述を正しく読み取る。
  2. 属性の有無でリレーションを省略しない
    関係スキーマの属性欄にキーがなくても,業務フロー上は明らかに必要な参照関係が抜け落ちると不整合を招く。
  3. 会員/非会員,契約/利用を区別
    同じ「利用」でも,月極と時間貸,さらに会員利用と非会員利用で管理方法が異なる点を丁寧に整理する。
  4. サブタイプ設計のポイント
    上位エンティティ(駐車場)と下位エンティティ(月極駐車場,時間貸駐車場)の関係,およびそれぞれの契約・利用エンティティの結び付けを押さえる。
これらを意識することで,概念データモデルのリレーションシップ設計を確実に行えるようになります。

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

関係 “ポイント付与”, “ポイント交換” には, ポイント管理上の不具合がある。 不具合の内容を50字以内で具体的に述べよ。
模範解答
複数月のポイントを合算して交換する場合でも、ポイントは古い付与年月から順に消費し、未消費残高を正確に管理する。
解説

1. モデル解答のキーワード整理

  • 「複数月のポイントを合算して交換する場合でも」
  • 「古い付与年月から順に消費」
  • 「未消費残高を正確に管理」
これらが、不具合の核心をつかむためのポイントです。

2. 解答に至る理由の論理的説明

(1) 要件としてのポイント消費ルール

問題文には次の記述があります。
「交換を行うと, 付与年月が古いポイントから順に消費され, その内容が記録される。」
このとおり,システムは FIFO(古いものから順に) でポイントを消費し,かつ,各付与年月ごとの未使用残高を管理する必要があります。

(2) 現状スキーマの不備

関係スキーマ(図4)を見ると,ポイント管理に関するリレーションは以下のとおりです。
リレーション名属性
ポイント付与会員ID、付与年月、付与ポイント
ポイント交換会員ID、交換年月日、付与年月、商品コード、数量
ポイント交換テーブルには「付与年月」の列があるものの,
  • 1回の交換で複数月分のポイントをまとめて消費する場合
  • ある月のポイントを一部だけ消費して残りを次月以降に繰り越す場合
を正しく表現できません。
その結果,どの付与年月のポイントをいくら消費したのかが不明確となり,各月の未消費残高を管理できなくなります。

3. 受験者が誤りやすいポイント

  • 「交換年月日」と「付与年月」を混同し,交換日時だけ管理すれば足りると考えてしまう。
  • ポイント交換テーブルに「付与年月」を設けたことで,多月分の消費も問題ないと思い込む。
  • 実際には1レコードで扱える付与年月は1つだけなので,複数月のポイント消費には対応できない点を見落としやすい。

4. 試験対策として覚えておくべきポイント

  1. ポイント管理システムでは「付与年月ごとの残高」と「消費年月ごとの消費量」を正確にトレースできる設計が必須
  2. FIFO(古いポイントから順に消費)ルールは要件定義に忠実に反映する
  3. 交換や利用のテーブル設計では,1回の取引で複数の付与年月を扱えるように詳細な履歴テーブルを用意する
  4. スキーマ設計時には,「何をキーに残高を管理するか」「何を列として記録するか」を要件と照らして一つずつ検証すること
これらを押さえておくと,ポイント管理の不具合に関する設問にも対応しやすくなります。

設問3(2)関係 “ポイント付与”, “ポイント交換” について,(1),(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. (a) 不要年月
  2. (b) 新設する関係「ポイント消費」の属性
    • 会員ID (外部キー)
    • 付与年月 (主キー)
    • 交換年月日 (主キー)
    • 消費ポイント
  3. (c) 「ポイント消費」への具体的なデータ投入例
会員ID付与年月交換年月日消費ポイント
T12345672015-042015-06-10250
T12345672015-052015-06-1050
T12345672015-052015-07-2010
T12345672015-062015-07-2090

解答選択の論理的根拠

  1. 【(a) 不要年月 の選択理由】
    問題文の関係スキーマ「ポイント交換」には
    「会員ID、交換年月日、付与年月、商品コード、数量」
    が定義されています。しかし「ポイント交換」は商品と数量を管理するものであり,「付与年月」はポイント付与履歴を参照するための外部情報です。
    —————————————
    「ポイント交換(会員ID、交換年月日、付与年月、商品コード、数量)」
    —————————————
    よって、この関係から「付与年月」を削除(不要年月)し,ポイント消費を別に管理するのが正しい設計です。
  2. 【(b) ポイント消費 の属性設計】
    解答表に示されている要件を整理すると,ポイント消費は「いつ付与されたポイントを」「いつの交換で」「いくつ消費したか」を管理する必要があります。
    また,付与の元となった「ポイント付与」レコードとの対応付けには「会員ID」「付与年月」が必要です。
    さらに,ひとつの交換(交換年月日)で複数の付与年月からポイントを順に消費する(FIFO)ため,交換年月日も主キーに含めます。
    以上から,関係「ポイント消費」は以下のように設計します。
    属性名役割
    会員ID外部キー
    付与年月主キー/外部キー
    交換年月日主キー
    消費ポイント
  3. 【(c) ポイント消費 の具体例】
    問題文の「図1 ポイント付与履歴」「図2 ポイント交換履歴」をもとに,最古のポイントから順に消費量を按分します。
    • 2015-06-10 の交換(消費合計300)は
      • 2015-04付与分 250 → 消費ポイント=250
      • 残 50 → 2015-05付与分から消費ポイント=50
    • 2015-07-20 の交換(消費合計100)は
      • 2015-05付与分 残10 → 消費ポイント=10
      • 残90 → 2015-06付与分から消費ポイント=90
    これを表にまとめると,前節の表のとおりです。

受験者が誤りやすいポイント

  • 「付与年月」を削除する対象として誤って「交換年月日」や「商品コード」を選んでしまう。
    → ポイント消費を管理するには「交換年月日」が必須であるため,そちらは残す。
  • 消費の按分(FIFO)を考慮せず,一つの交換イベントを一行にまとめてしまう。
    → 複数の「付与年月」からポイントを消費する場合は,消費レコードが分割される。
  • 主キー/外部キーの設定を忘れる。
    → 会員IDは「会員」テーブルへの外部キー,付与年月+交換年月日は複合主キー。

試験対策として覚えておくべきポイント

  1. 関係の分割設計
    一つの関係で扱う情報が複数の役割を兼ね始めたら,責務に応じて新規関係を設ける。
  2. FIFO 消費のモデル化
    「どの時点で付与された資源をいつ消費したか」を記録する場合,付与側と消費側を別関係とし,外部キーで関連付ける。
  3. 複合主キーの設定
    1 件の消費記録を一意に識別するのに必要な属性を漏らさない。
  4. 論理設計の要件読み取り
    問題文中の「〜ごとに消費」「〜から順に消費」「…が記録される」といった表現を設計要件として確実に表現する。
← 前の問題へ次の問題へ →

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