2012年 秋期 応用情報技術者試験 問6
スーパーマーケットの販売管理システム
スーパーマーケットを営むQ社では、3年前にポイント制度を導入した。希望する顧客には、会員になってもらい、ポイントカードを提供する。買物の際にポイントカードを提示すると、100円につき1ポイントを加算する。たまったポイントは1ポイントにつき1円の換算で、精算の際に利用できる。ポイントの有効期限は、最後にポイントカードを使用した日から2年間である。
Q社の販売管理システムでのポイント制度に関係する部分のE-R図を図1に示す。
<div class="relationship">
<div class="relationship-line">売上</div>
<div class="relationship-diamond">売上明細</div>
<div class="relationship-line">商品</div>
<div class="relationship-diamond">商品種別</div>
<div class="relationship-line">
<span class="blank-box">b</span>
</div>
<div class="relationship-diamond">
<span class="blank-box">c</span>
</div>
</div>
表記ルール
(1) エンティティタイプは、長方形で表し、長方形の中にエンティティタイプ名を記入する。
(2) リレーションシップは、エンティティタイプ間に引かれた線で表す。
"1対1"のリレーションシップを表す線は、矢を付けない。
"1対多"のリレーションシップを表す線は、"多"側に矢を付ける。
"多対多"のリレーションシップを表す線は、両端に矢を付ける。
(3) 一方のエンティティタイプのインスタンスから見て、他方のエンティティタイプに対応するインスタンスが存在しないことがある場合は、リレーションシップを表す線の対応先側に"○"を付ける。
(4) 一方のエンティティタイプのインスタンスから見て、他方のエンティティタイプに対応するインスタンスが必ず存在する場合は、リレーションシップを表す線の対応先側に"●"を付ける。
テーブル名 | 項目 |
---|---|
会員 | 会員コード、氏名、ポイント、最終使用日 |
売上 | 売上番号、売上日時、会員コード、利用ポイント |
売上明細 | 売上番号、明細番号、商品コード、単価、数量 |
商品 | 商品コード、商品種別コード、商品名、単価 |
商品種別 | 商品種別コード、商品種別名 |
会員でない顧客が購入した場合は、テーブル"売上"の列"会員コード"にはNULLが設定される。会員になっても、一度も購入しない場合もあり得る。
商品は、いずれかの商品種別に分類されるが、商品が存在しない商品種別もあり得る。商品の単価は、頻繁に変更される。
[ポイント制度の改良]
最近、競合する他のスーパーマーケットでもポイント制度を導入し、そちらのポイント制度の方が魅力的との評判で、売上を伸ばしている。そこで、Q社では、ポイント制度を会員にとって、より魅力的なものに改良し、売上の増加を図ることにした。検討の結果、次の仕様を追加することにした。
(1) マイレージサービス
会員の購入累計額に応じて、精算時に加算するポイントを整数倍する。この倍率をマイレージ倍率といい、例えば、"購入累計額が50万円以上だと2倍、100万円以上だと3倍"といった具合にして決定する。
購入累計額は、その年の1月1日からの購入金額の合計とする。年初におけるマイレージ倍率の初期値は、前年の購入累計額から決定する。買物での精算の際に、その年の購入累計額が、現在のマイレージ倍率よりも大きくなる金額に達したら、マイレージ倍率を更新し、次回の精算からは、新しいマイレージ倍率を適用する。
(2) タイムサービス
特定の曜日、時間帯に、特定の商品種別の商品を購入すると、その商品の購入金額に対して付与するポイントを整数倍する。この倍率をタイムサービス倍率という。
例えば、"日曜日の午前中は日用品のポイントを5倍にする"などの指定が可能である。設定の見直しと変更は随時行われる。
これらの仕様を追加するために、現行データベースのテーブルに必要な列を追加するとともに、図3に示すテーブルを新たに追加した。
テーブル名 | 項目 |
---|---|
マイレージサービス | 購入累計額の下限、マイレージ倍率 |
タイムサービス | 曜日、時間帯、d、タイムサービス倍率 |