データベース設計に関する次の記述を読んで,設問1〜3に答えよ。
B社は,複数の加盟企業向けに共通ポイントサービスを運営している。今回,その基盤のシステム(以下,ポイントシステムという)を再構築することになり,データベース設計を開始した。
〔ポイントシステムの概要〕
1.会員
会員は,B社が発行したポイントカードの利用者であり,会員コードで識別する。
2.加盟企業
(1)加盟企業は,B社と共通ポイントサービス加盟の契約をした企業であり,加盟企業コードで識別する。コンビニエンスストア,レストランチェーンなど様々な業種の企業がある。同じ加盟企業と複数回の契約をすることはない。
(2)加盟企業は複数の店舗をもつ。店舗は,加盟企業コードと店舗コードで識別する。
3.加盟企業商品と横断分析用商品情報
(1)加盟企業商品
①加盟企業が販売する商品を,B社から見て加盟企業商品と呼ぶ。
②加盟企業は,商品をポイントシステムに登録するときに,当該加盟企業の商品コード(以下,加盟企業商品コードという),商品名(以下,加盟企業商品名という),JANコードを登録する。加盟企業商品は,加盟企業コードと加盟企業商品コードで識別する。
③加盟企業商品コードは再利用されないが,加盟企業商品名とJANコードは再利用されることがある。また,JANコードが設定されない商品もある。
(2)横断分析用商品情報
①横断分析用商品情報は,複数の加盟企業が同じ商品を扱っている場合に同一商品であると認識できるようにするものである。横断分析用商品情報には,横断分析用商品コードと横断分析用商品名を設定し,横断分析用商品コードで識別する。横断分析用商品名は一意になるとは限らない。
②B社は,加盟企業商品が追加される都度,既に同じ商品の横断分析用商品が登録済みかどうかを確認し,登録済みと判断すればその横断分析用商品コードを,登録済みでないと判断すれば新たな横断分析用商品コードを加盟企業商品に設定する。
③横断分析用商品コードの設定には,加盟企業商品の登録から数日を要する場合がある。
〔ポイントの概要〕
1.ポイント
ポイントは,加盟企業の販促のために会員に与える点数である。
2.ポイントの利用
(1)会員は,自分のポイント残高を上限として,購入金額の一部又は全てをポイントで支払うことができる。利用したポイント(以下,利用ポイントという)は,支払時にポイント残高から減算する。
(2)ポイントは,全ての加盟企業の店舗で利用できる。
(3)利用ポイントを支払ごとに記録する。1回の支払はレシート番号で識別する。
3.ポイントの付与
(1)会員がポイントカードを提示して支払をすると,その支払で付与するポイントを記録する。ポイントカードの提示がなければこの記録を作成しない。
(2)付与ポイントを記録した時点では,付与ポイントの記録は会員のポイント残高に加算しない。ポイント残高への加算は後述の日次バッチで行う。
(3)ポイントには,商品ごとの購入金額に対して付与するものと,支払方法ごとの支払金額に対して付与するものがある。
①購入商品ごとの付与ポイント
・商品の購入金額(購入数×商品単価)にポイント付与率を乗じて計算する。
・ポイント付与率は,通常は全加盟企業共通で決められている基準ポイント付与率を適用するが,後述のクーポンの利用によって変わることがある。
②支払方法ごとの付与ポイント
・支払においては,現金,ポイント利用,電子マネー利用など,1回の支払で複数の支払方法を併用できる。
・支払方法ごとの付与ポイントは,各支払方法での支払金額に,ポイント付与率を乗じて計算する。
・各支払方法に対するポイント付与率は,ポイント設定で決めている。ポイント設定はポイント設定コードで識別し,ポイント付与率,適用期間をもつ。ポイントを付与する支払方法にポイント設定を対応付ける。同じポイント設定を,複数の支払方法に対応付けることがある。
(4)付与ポイントは,小数第3位まで記録する。
(5)会員がポイントで支払った分にもポイントを付与する。
4.付与ポイントのポイント残高への加算
(1)毎日午前0時を過ぎると,支払ごとの付与ポイントの記録から,支払日時が前日の分を日次バッチで抽出し,集計して会員のポイント残高に加算する。
(2)購入商品ごとの付与ポイントと支払方法ごとの付与ポイントを加算し,小数点以下を切り捨てたものが支払全体の付与ポイントとなる。
5.ポイントの後付け
(1)会員がポイントカードを忘れた場合,会員が申告すると店員は支払時のレシートに押印する。会員がこのレシートを1か月以内にこの店舗に持って行き,ポイントカードを提示すると,その支払で付与するポイントを記録する。
(2)付与ポイントの記録は,レシートが発行された日時の記録となる。
〔クーポンの概要〕
1.クーポン
(1)B社は,クーポンという販促手段を用意している。加盟企業は,自社の店舗に会員を呼び込むために,クーポンを企画する。
(2)クーポンは,会員に配布する紙片である。会員が支払時にクーポンを提示するとクーポンに設定されたポイント付与率を適用する。店舗は,提示されたクーポンを回収する。
(3)クーポンの企画単位にクーポンコードを付与する。
(4)クーポンは,企画した加盟企業の店舗だけで利用できる。
(5)クーポンには,利用期間を設定している。
(6)設定できるクーポンには,適用対象となる店舗を限定したクーポン,適用対象となる商品を限定したクーポン,及び,店舗も商品も限定しないクーポンがある。ただし,商品の購入数を限定したクーポンは設定できない。
(7)会員は,クーポンコードが異なる複数のクーポンを1回の支払で利用できる。
(8)クーポンの効果を測るために,クーポンがどの支払で利用されたか分かるように記録する。
2.クーポンの配布方法
(1)クーポンを企画した加盟企業は,B社に料金を支払い,クーポンの配布対象にしたい会員の抽出条件をB社に伝える。
(2)会員の抽出は,支払時のポイント付与の記録を用いて行う。抽出条件には,ある期間に特定の店舗を利用した,特定の商品を一定以上の金額分購入した特定の支払方法で一定以上の金額を支払った,などがある。
(3)B社は,条件に合う会員を抽出し,クーポン配布リストとして登録する。会員の抽出は,日次バッチで行う。
(4)クーポン配布リストに登録されている会員が,全加盟企業のいずれかの店舗を利用した場合に,クーポンを発行する。同じ会員に同じクーポンを2回発行することはない。
(5)クーポンには,配布上限数と配布期間を設定している。
〔概念データモデルとスキーマ設計〕
概念データモデルを図1に,関係スキーマを図2に示す。
図1 概念データモデル(未完成)
図2 関係スキーマ(未完成)
解答に当たっては,巻頭の表記ルールに従うこと。ただし,エンティティタイプ間の対応関係にゼロを含むか否かの表記は必要ない。
なお,エンティティタイプ間のリレーションシップとして“多対多”のリレーションシップを用いないこと。エンティティタイプ名及び属性名は,それぞれ意味を識別できる適切な名称とすること。
設問1 図1,2について,(1),(2)に答えよ。
(1)図2中の a 〜 k に入れる適切な属性名を答えよ。
なお,主キーを構成する属性の場合は実線の下線を,外部キーを構成する属性の場合は破線の下線を付けること。
解答・解説
解答例
a:加盟企業コード
b:店舗コード
c:支払金額
d:購入数
e:ポイント設定コード
f:ポイント付与率
g:配布上限数
h:クーポンコード
i:会員コード
j:クーポンコード
k:レシート番号
解説
ー
(2)図1のリレーションシップは未完成である。必要なリレーションシップを全て記入し,図を完成させよ。
なお,図に表示されていないエンティティタイプは考慮しなくてよい。
解答・解説
解答例
解説
ー
設問2 図2中の関係“加盟企業商品”について(1)〜(3)に答えよ。
(1)関係“加盟企業商品”の候補キーを全て答えよ。また,部分関数従属性,推移的関数従属性の有無を,答案用紙のありなしのいずれかを○で囲んで示せ。“あり”の場合は,次の表記法に従って,その関数従属性の具体例を一つ示せ。
関数従属性 | 表記法 |
部分関数従属性 | 属性1→属性2 |
推移的関数従属性 | 属性3→属性4→属性5 |
なお,候補キー及び表記法に示されている属性1属性3,属性4が複数の属性から構成される場合は,{}でくくること。
解答・解説
解答例
候補キー
{加盟企業コード, 加盟企業商品コード},
{加盟企業コード, 横断分析用商品コード}
部分関数従属性 有無:あり
部分関数中属性 具体例
・加盟企業コード→加盟企業名
・加盟企業コード→契約開始日
・加盟企業コード→契約終了日
・横断分析用商品コード→横断分析用商品名
推移的関数従属性 有無:あり
部分関数中属性 具体例
{加盟企業コード, 加盟企業商品コード}→横断分析用商品コード→横断分析用商品名
解説
ー
(2)関係“加盟企業商品”の候補キーのうち,主キーとして採用できないものはどれか答えよ。また,その理由を45字以内で具体的に述べよ。
解答・解説
解答例
採用できない候補キー:
{加盟企業コード, 横断分析用商品コード}
理由:
横断分析用商品コードは加盟企業商品が登録された後 に設定される場合があるから
解説
ー
(3)関係“加盟企業商品”は第1正規形,第2正規形,第3正規形のうち,どこまで正規化されているか答えよ。第3正規形でない場合は,第3正規形に分解し,関係スキーマを示せ。ここで,分解後の関係の関係名には,本文中の用語を用いること。
なお,主キーを構成する属性の場合は実線の下線を,外部キーを構成する属性の場合は破線の下線を付けること。
解答・解説
解答例
正規形:第 1 正規形
関係スキーマ:
加盟企業(加盟企業コード, 加盟企業名, 契約開始日, 契約終了日)
加盟企業商品(加盟企業コード, 加盟企業商品コード, 横断分析用商品コード, 加盟企業商品名,JAN コード)
横断分析用商品情報(横断分析用商品コード, 横断分析用商品名)
解説
ー
設問3 〔ポイントの概要〕の4.で示した日次バッチについて,(1),(2)に答えよ。
(1)日次バッチの集計処理では,付与ポイントの記録がポイント残高に加算されない場合がある。それはどのような場合か。本文中の用語を用いて30字以内で述べよ。
解答・解説
解答例
購入の翌日以降にポイントの後付けをしたとき
解説
ー
(2)付与ポイントの記録をポイント残高に正しく加算するために,日次バッチの処理を変更することにした。この処理に用いる属性を,関係“支払”に一つ追加した。その属性の役割を30字以内で述べよ。
解答・解説
解答例
・ポイント残高に加算済みかどうかを判別する。
・ポイント残高への加算処理日が分かるようにする。
・付与ポイントの記録を作成した日で抽出できるようにする。
解説
ー
IPA公開情報
出題趣旨
データベースの設計では,業務内容や業務で取り扱うデータなどの実世界の情報を統合的に理解し,データモデルに反映することが求められる。
本問では,共通ポイントサービスのデータベース設計を題材として,業務要件をデータモデルに反映する能力,関数従属性,正規化理論などの基礎知識を用いてデータモデルを分析する能力,データモデルの問題点を識別する能力を問う。
採点講評
問 1 では,共通ポイントサービスを題材に,業務要件に基づくデータベース設計,正規化理論に基づくデータモデル分析について出題した。全体として正答率は平均的であった。
設問 1(2)は,正答率はやや高かったが,店舗と支払のリレーションシップが記入できていない解答が散見された。クーポンの配布対象にしたい会員の抽出に関する要件を読み取れていないと思われる。リレーションシップに関する記述が複数の業務要件に分散していても的確に読み取れるようにしてほしい。
設問 2(1)は,全体的に正答率は平均的であったが,候補キーの“{加盟企業コード, 横断分析用商品コード}”を“横断分析用商品コード”と答えてしまうなど,候補キーとは何かを正しく理解できていない解答が多く見られた。推移的関数従属性の具体例については“横断分析用商品コード→横断分析用商品名”の部分しか書けていない解答が多く見られた。正規化理論の基礎を十分理解するようにしてほしい。