解いてみた！データベーススペシャリスト試験 令和3年 午後Iの演習と解説の自作




IPA 令和4年度のデータベーススペシャリスト試験の受験と学習の証として、令和3年の午後IIの演習と解説を自作してみました。

午後IIの一部（問1の図3と図4の概念データモデルと関係スキーマ）を解き、本記事では、答えを出すプロセスをまとめてみました。


## 補足：データベーススペシャリスト試験の午後II試験とは

公式から引用すると下記のように記載があり、例えばモデリングや要件定義だけではなく、運用とかも一部含めた試験になります。

>期待する技術水準
高品質なデータベースを企画、要件定義、開発、運用、保守するため、次の知識・実践能力が要求される。
>　(1)	データベース技術の動向を広く見通し、目的に応じて適用可能な技術を選択できる。
　(2)	データ資源管理の目的と技法を理解し、データ部品の標準化、リポジトリシステムの企画・要件定義・開発・運用・保守ができる。
　(3)	データモデリング技法を理解し、利用者の要求に基づいてデータ分析を行い、正確な概念データモデルを作成できる。
　(4)	データベース管理システムの特性を理解し、情報セキュリティも考慮し、高品質なデータベースの企画・要件定義・開発・運用・保守ができる。

https://www.jitec.ipa.go.jp/1_11seido/db.html


## 前提・資料の整理

本記事で扱う問題

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2021r03.html#03aki


## 解答結果

私の解答

![IMG_0182.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/080454f2-018f-7c6d-566e-6ec970cf9771.png)


公式の解答

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/b892b1f0-a2ef-7492-a80b-8623b2d5b93b.png)


## 図2　関係スキーマの穴埋めの解説作り

以下では、答えを出すプロセスをまとめてみました。まずは図2　関係スキーマの回答のプロセスを紹介します。※図1の概念データモデルは本記事の下部で後述します

### aとbの解説


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/cd88c380-5bb5-e105-cd3d-c14e596965fe.png)

直接文章を読んで回答したというよりは、他の属性を見て回答に導いた。

▼他の属性を見た際の考察

1. `支払`の中に`会員コード`（who）と`支払日時`(when)がある
2. `支払方法明細`や`購入商品明細`は`支払`の主キーの`レシート番号`を組み合わせて、主キーにしている、リレーションを持っている
3. `支払方法明細`(how)や`購入商品明細`(what)と定義できる

上記より、支払いをするのに、「誰が」「いつ」「何を」「どのように」支払ったかの情報はあるが、支払いする店舗（どこで）の情報がない。

そのため、`店舗`の一意で識別する{`加盟企業コード`と`店舗コード`}の組み合わせをaとbに回答する。※2の(2)に記載

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/8a30407f-84c8-55dd-e8b7-66640e813ad6.png)


### cの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/5c9d5782-fbb1-1650-6d23-434f054dc9e2.png)

演習している際、ここは全くわからなかった。なので、あくまで解答を見た上で、プロセスを推測する。

答えは`支払金額`らしいが、おそらく3の(3)の②を読んで、回答に導く。

`支払方法明細`に`付与ポイント`があります。ポイントを付与するには、各支払方法に付与率が設定され、そこに支払金額を掛けて算出されるとのこと。

そのため、支払金額があるとポイントを付与できる？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/8910917b-db8d-eb3c-3fde-a5d75589f414.png)


### dの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/be5c387f-1bb7-25ac-8842-76258cfa261d.png)

aとbと同じく他の属性を見て、推測して回答。

ポイントを付与するには、購入金額に対して付与するものがあると書かれています。

そして、`購入商品明細`を見ると、`商品単価`がすでに設定されていたので、そこから`購入数`と回答することで購入金額になる（(3)の①に購入金額=購入数×商品単価と記載）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/3b31d71c-dfae-4e13-8c51-dadd0b08c5f8.png)


### eの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/c23b0ae8-f2df-bd59-70e6-c871d0795d11.png)

3の(3)の②に「各支払方法に対するポイント付与率はポイント設定で決めている」と記載されています。

そこから、`支払方法`にはポイントを付与するために、ポイント設定の属性が入ることが分かります。

また直下に「ポイント設定はポイント認定コードで識別し」と書かれているため、ポイント設定の属性を表現するために`ポイント認定コード`と回答。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/03f100a6-de0d-ca7c-dacd-529ffec96e64.png)


### fの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/7ef4b957-9a3e-4cfb-e54e-8a801476657b.png)


自分は演習時に`レシート番号`と回答したが、誤りで正解は`ポイント付与率`とのこと。

`レシート番号`がすでに誤りと気づいているが、3の(1)からポイントカードを使って支払いをすると、ポイントを記録するため、支払の主キーの`レシート番号`を回答した。しかし、これはあくまでポイントの"利用"であって、今回はポイントの"設定"なので正答ではないことがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/976e265b-912b-ac31-1dc7-ff2f9233b6a1.png)


### gの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/b88b2918-9a2d-4069-0c4c-103295d3e799.png)

単純にここは文章を読んで、かつ埋まっていないものを選択するもので、配布・利用のそれぞれの期間やクーポンの発行できる権限社（加盟企業のみ）、付与率などがすでに埋まっているが、下記の2の(5)配布上限数に関する属性がないため、`配布上限数`と回答できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/c32e67cb-eb00-1cf9-1b1d-51390d106a74.png)



### h・iの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/bf5d8340-47dc-e2de-d5ba-11c87c6757b6.png)

まず、hにはクーポンの配布には、クーポンとのリレーションがあるはずで、クーポンそのものを特定できるものがいるため、`クーポン設定`の主キーの`クーポンコード`を回答（本文からというよりは感覚的な意見で申し訳ございません）。

次に、iに関して。2の(4)に配布するのに、同じ会員に同じクーポンを2回発行することはないと記載されている。そこから会員ベースで発行・配布されているのが読み取れるので、`会員`の主キーの`会員コード`と回答。

またここでの`会員コード`は、同じ会員に同じクーポンを発行するのは1回という制約から、発行・配布に、`会員コード`を主キーに持たせることができるため、主キーとして回答した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/b74bfd30-d0b4-cedd-4509-f34e1df4ffb3.png)



### j・kの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/66de7870-eab1-6bec-8bdf-bdaf000e6f58.png)

まず、jにはhと同じく、クーポンの利用には、クーポンそのものを特定できるものがいるため、`クーポン設定`の主キーの`クーポンコード`を回答。

次にkだが、1の(8)に、クーポンの利用には支払とリレーションを持つことが分かる。そのため、支払の主キーである`レシート番号`を回答する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/7c81114e-3254-192e-9679-01e7251c65d5.png)

またここでの`レシート番号`は、1の(2)より「店舗は提示されたクーポンを回収する」と書かれていることから、ある種推測ですが、1クーポンは1回の利用(支払い)のみと考えられ、利用に、`レシート番号`を主キーに持たせることができるため、主キーとして回答した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/096b0df5-52c9-c263-3521-a0109746cd05.png)


## 図1　概念データモデルの解説作り

次に図1の概念データモデルの回答のプロセスを紹介します。


### クーポンの配布と会員/クーポンの利用と支払のリレーションについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/25db9e32-db6c-3fd9-2f2c-a9047dae9f06.png)


**クーポン配布ー会員**

先ほどの図2のj・kの解説のところと同じで、クーポンがどの支払で利用されたかわかるように記録すると記載されていることから、`クーポン利用`と`支払`がリレーションを持つことが分かる。

ここも本文中で断定していないですが、1クーポンは1支払であって、すべての支払にクーポンが使えるのは1回ではないとは記載していない。

そこから、支払は、クーポンが別であれば複数使えることから、`会員`対`クーポンの配布`は1対多だと考えられる。そのため、`会員`→`クーポン配布`と回答する。


**クーポン利用ー支払**

先ほどの図2のh・iの解説のところと同じで、2の(4)に配布するのに、同じ会員に同じクーポンを2回発行することはないと記載されていることから、クーポンの配布と会員がリレーションを持つことが分かる。

1の(7)で1回の支払いで複数のクーポンを使えることから、支払：クーポン利用は、1:多ということが分かる。そのため、`支払`→`クーポン利用`と回答する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/d98fd4de-92da-cfc8-7f54-c63770d51534.png)


### クーポンの設定と配布/利用のリレーションについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/bf8423c0-3040-d503-ea7c-1dbef051d4b3.png)


先ほどの図2のj・kとh・iの解説では、クーポンの配布・利用ともに、クーポンそのものを特定できる属性が必要で、それが図2に未完成時点で未記載だったことから、クーポンコードと回答した。

そしてそのクーポンコードのみを主キーとしているのはこの問題では、`クーポン設定`のテーブルになります。そこから、`クーポン設定`と`クーポン配布`と`クーポン設定`と`クーポン利用`はリレーションを持つことが分かります。

ある1つのクーポンに対し1配布（=1会員）だけが使えるや、ある1つのクーポンに対し1利用（1支払）だけできるとは記載されていないことから、ある種経験則的ですが、ある1つのクーポンに対し、複数の配布・利用ができると考えられる。

ゆえに、`クーポン設定`→`クーポン配布``クーポン設定`→`クーポン利用`の矢印を引いて回答した


---
すみません、以降解いてから放置してしまったため、思い出して書くことができなくなりました。


### クーポンの設定とクーポン設定対象店舗のリレーションについて


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/da395cd1-df39-3d02-0521-44b6ccffcd46.png)


### 店舗とクーポン設定対象店舗のリレーションについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/7946ceef-3bfd-1b63-6967-69e64259b139.png)





### ポイント設定と支払方法/購入商品明細のリレーションについて


購入商品は誤り

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/6f5b398c-f853-8bd2-a12e-5d9db717a392.png)



### 店舗と支払のリレーションについて

ここは演習時では回答できず。

正答を見た上で、解説する


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1833757/eac69445-68cf-3e67-d669-149028e04d3e.png)



以上、IPA 令和4年度のデータベーススペシャリスト試験 令和3年の午後IIの演習と解説を自作してみました。