ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

JaSST Review'20 「S7) パネルディスカッション」聴講メモ

はじめに

JaSST Review'20 (JaSSTソフトウェアテストシンポジウム-JaSST Review'20)

S7) パネルディスカッション
パネリスト
鈴木 兄宏(日科技連出版社
川島 義隆(ウルフチーフ)
風間 裕也(ビズリーチ
の聴講メモです。

Twitterのつぶやきがtogetterでまとめられています。併せてご参照ください。
ソフトウェアレビューシンポジウム2020 #JaSSTReview - Togetter

聴講メモ

Q.
レビューを実施する上で最も大切にしていることは?
A.
自分の役割を考えてレビューする。編集者はあくまでも手助け。コメントを受け付けてくれるかは二の次。そのコメントを受けて考えてくれることを重視している。(鈴木)
心理的安全性の確保。抽象度や目線の違いにより、感情のぶつかり合いに発展しがち。感情ではなく仕組みで動かす。(川島)
鈴木さんのやり方はレビュイーに寄った立場で動いており、心理的安全性を保っているように見えた。(風間)
著者がへそを曲げたらおしまい。(鈴木)
発言する前にはTwitterで様子見。記事にした時の反応を見ている。(川島)
仕組みはあまり考えたことがない。著者と編集者は1対1なので、馬が合わないときは仕方ない。部下との間であれば対応の仕方は考える。(鈴木)

Q.
レビューがうまくいく/うまくいかない主な要因は何でしょうか?その引き寄せ方・打開方法は?何をもってレビューの良し悪しを評価する?
A.
誉田先生の事例のように「自分の考えていたことがわかってよかった」というコメントはレビューがうまくいった証といえるのでは。(鈴木)
コンテキストのブレがバチッと決まったときに達成感を感じる。成果物が2,3割程度の段階での方向性のすり合わせに力を入れている。(川島)
作成者がコンテキストを説明してくれて、レビュアーがコンテキストを理解したうえでレビューを実施できた時はよかった。(風間)
欠陥を見つけるのがレビューの良し悪しの指標の1つではあるが、コストや性能のバランスを考えたうえで調整できたかどうかを判断できたかも重視している。(川島)
完成したものを持ってきても直したくない。なので、2,3割の段階で持ってきてもらって方向性を決めることを重視している。(川島)
コメントをなかなか受け付けてくれない著者でも、力量を一度認めてくれると、それ以降は態度が変わることもある。逆に言うと、そういうきっかけが無いとレビュアーとレビュイーの関係を変えるのは難しいかも。(鈴木)

Q.
レビュー対象の問題や改善点を見つけにいく際の着眼点・嗅ぎつけ方・情報の引き出し方など、実践している工夫を教えてください。
A.
過去の事例集めによって嗅覚が養われた。(鈴木)

Q.
よいレビューアになるために「これだけはやっておけ!」というものがあれば教えてください。
A.
私の話した内容を反芻していただければ…!視座はポジションにもよるので難しいが、スキルや経験を身に着けることは日々の鍛錬でできる。(川島)
ソフトウェア開発者は抽象化する能力が高いと感じるし、レビュアーとしても抽象化する能力は大切になる。抽象化と具体化のいったりきたりする能力が大事なのでは。(鈴木)
ソフトウェア技術者には抽象化する能力が大事。これがソフトウェア設計そのものであり、これができないとコードは書けない。「具体と抽象 ―世界が変わって見える知性のしくみ」という本を勧めている。(川島)
本を読んだときにその本の内容紹介を200文字でまとめてみるとよいかも。編集者は年中それをやっている。(鈴木)
Twitterは140文字で誤解されず正しく考えを伝えるための訓練といえるかもしれない。(川島)

Q.
人類はどうしてレビューを後回しにしてしまうのでしょうか?
A.
成果物が完成してからレビューするというプロセスになっていること。また、形になっていない状態で自分の考えを正しく話すというのはスキルが必要だし、気恥ずかしさもあるからでは。(川島)

Q.
自分を含めレビューアが複数いて、自分が上位者に当たる時、下位者のレビューアの発言が少なくなりがちです(上位者が発言するので当事者意識が薄くなりがち)。レビューの質を下げずに下位者のレビューアとしての成長を促すポイントはありますか?
A.
複数人で担当する時、普段は発言しないようにしている。上位者が発言すると下位者が発言しなくなるため。だが、ギリギリのタイミングでは指摘をする。(鈴木)
黙っていることも多いが、必ずしもそれが良かったとは思わない。議論の最後でちゃぶ台返しをしてしまうと、それ以降に委縮して話してくれなくなる。(川島)
会議に参加するとしゃべりたくなってしまうので、あえて出ないこともある。(鈴木)
自分の考えと周囲が完全に一致することは無い。その人にあったやり方を見つけてほしい。その間の失敗は上位者としてカバーする。(鈴木)

Q.
レビューは、成果物に対する欠陥を見つける作業になるため、レビューイからするとどうしてもネガティブに捉えられてしまうことがあるかと思います。ポジティブな雰囲気でレビューを実施するための工夫などがありましたら、共有いただきたいです。
A.
誉めるところを探す。何かしらはある。仕事柄あら捜しの面はあるが、それだと著者のやる気をそいでしまうため、気持ちが上がるような言葉の声がけを心がけている。(鈴木)
レビューで欠陥だけでなく良い点もコメントする。良いことから言って、そのあとに悪い点を指摘する。(川島)
欠陥をがんばって見つけるというよりは、ここが分からないのだけど、のように説明をお願いすると、説明の途中に作成者が気づくかもしれない。そうすると場も和らぐかもしれない。(風間)

Q.
どうしても誤字脱字に目が行ってしまい、肝心の内容が入ってきません。本質的な内容へ集中するためにどうしたらよいでしょうか。
A.
私も同じです!誤字脱字が多いと疲れる…。誤字脱字を一度指摘して直してもらってから見直している。誤字脱字に目がいってしまうのは仕方がないのでは。誤字脱字を見抜ける才能があると前向きにとらえてはどうか。(鈴木)
レビューで誤字脱字ばかり指摘している人もいる。集合レビューでは誤字脱字を指摘せず、後でまとめて指摘するようにしている。プログラマーは誤字脱字率が高い気がするので、気にならなくなってきた…。(川島)
誤字脱字の指摘は後で渡すとか、事前にレビューしておくというのはありかも。私も集合の場では言わないかも。(風間)
紙で見ると誤字脱字が見つかりやすい。データ(画面)で見ることで流れに集中しやすくなるかもしれない。(鈴木)

Q.
レビュー観点としてオープンになっており、かつ役立つものは何かありますか?
A.
ソースコードレビューなどはあるかもしれないが、設計レビューだと多岐にわたるので難しいかも。(川島)
チェックリストを使うような読み方はしない。文章が論理的に正しいかを意識しながらよんだりする。(鈴木)
チェックリストがあったとしても、それ自体が抽象的になっているので、それを当てはめるには…と考える必要がある。(風間)

データベーススペシャリスト試験(令和2年度10月試験)受験記録

始めに

2020/10/18 に「データベーススペシャリスト試験」を受験してきました。

今回の試験に向けてどんな準備をしたのかを記録としてまとめておきます。

なお、前回(新型コロナウィルス感染症拡大防止の観点から中止になった)の勉強記録は別記事に残しています。
データベーススペシャリスト試験(令和2年度春期)勉強記録 - ぱと隊長日誌

(2020/12/26 追記)
後述の通り、試験結果は「合格」でした。
率直なところ、まるで手応えがなかったので、最終的な得点をみて驚いています。振り返りを受験直後に行ったため、反省が強くなっていますが、結果が良かったからといって振り返った内容を変えるものでもないので、そのままとしています。

教材と利用方法

本エントリでは教材毎に略記表記を定義して用いています。

情報処理教科書 データベーススペシャリスト 2020年版

略記:DB教科書

会員特典として過去18年分の試験問題と解答・解説をPDFファイルで提供されています。

白紙の解答用紙も含まれており、演習に便利です。ただし、実際の解答用紙とは若干の違いがあります。例えば、レイアウトが異なったり、文字数制限のある項目でもマス目がなかったり。本番の解答用紙はもっと使いやすいので、これで慣れておけば問題ありません。

今回の勉強で最も活用した教材となります。

令和02年データベーススペシャリスト合格教本

略記:DB教本

DB教科書の足りない部分を補う目的で利用しました。

過去問題の解説ではIPAの解答例に加え、著者独自の解答例及び解説もあります。また、DB教科書の解説では納得がいかなくても、DB教本の解説なら理解できることもありました。

データベーススペシャリスト過去問道場

データベーススペシャリスト過去問道場|データベーススペシャリスト.com

略記:DB道場

データベーススペシャリスト試験の午前Ⅱ問題の過去問題を解説付きで提供しています。

午前Ⅱの演習はこのサイトだけで行いました。

応用情報技術者過去問道場

応用情報技術者過去問道場|応用情報技術者試験.com

略記:応用道場

応用情報技術者試験の過去問題を解説付きで提供しています。「データベーススペシャリスト過去問道場」の姉妹サイトとなります。使いやすさも同様です。

午前Ⅰの演習はこのサイトだけで行いました。

勉強時間と進め方

勉強時間の測定にはStudyplusのスマホアプリを利用しました。

学習総合サイト Studyplus(スタディプラス)

2020/6 2020/7 2020/8 2020/9 2020/10 小計
DB教科書 12.75 7.0 23.5 36.5 23.75 103.5
DB教本 0.0 2.5 7.5 0.0 0.0 10.0
DB道場 0.0 0.0 1.75 2.0 1.0 4.75
応用道場 0.0 0.0 1.5 2.75 3.75 8.0
小計 12.75 9.5 34.25 41.25 28.5 126.25

(単位:時間)
※過去問題演習に取り組んだ時間は「DB教科書」の時間に含まれています。

基本は前回(データベーススペシャリスト試験(令和2年度春期)勉強記録 - ぱと隊長日誌)と同じ流れで進めました。

午前Ⅰ・午前Ⅱ対策は通勤時間に応用道場・DB道場で学びました。通勤の合間にスマホで取り組んだため、計算問題に取り組むことができませんでした。

午後対策として、DB教科書とDB教本を一通り読んだ後は過去問題演習をひたすら繰り返しました。午後Ⅱ問題は120分かかるため、まとまった時間を確保できるときは午後Ⅱ問題演習を優先しました。

午後対策で机に向かって過去問題に取り組める時間は限られていたので、これを補う目的でDB教科書の過去問題の解説を通勤や昼休みに読み込みました。この勉強方法だと、午後Ⅰについてはあまり成果が上がらず(問題と読み比べずに解説を読んだだけでは理解し辛い)、午後Ⅱについては多少カバーできた(解説に問題が抜粋されていて読み比べできた)ように感じました。

育児・家事の合間に取り組むため、休前日でも夜更かしせずに早めに寝て、翌朝は平日となるべく同じ起床時間にし、家族が起きてくるまでの時間を勉強に充てました。それでも足りない分は有給休暇を取得して勉強時間に充てることで補いました。

試験結果

「合格」でした!

時間区分 得点 合格点 / 配点
午前Ⅰ 71.40点 60 / 100点
午前Ⅱ 100.00点 60 / 100点
午後Ⅰ 81点 60 / 100点
午後Ⅱ 78点 60 / 100点

振り返り

午前Ⅰの結果が想定以上に悪かったです。原因は計算問題を軽視したためでした。合格基準はクリアしているものの、安全のためにはもう少し時間を割くべきでした。

また、当日朝は応用道場にアクセスできず(アクセスが殺到したため?)、追い込みできなかったことも想定外でした。

午前Ⅱの結果を踏まえると、試験対策としてはDB道場を繰り返し解くだけで問題なさそうです。

午後問題には苦戦しました。特に午後Ⅰで時間が足りませんでした。過去問題演習は同じ問題を繰り返し解くため、慣れで解答ペースが上がっており、本番での解答ペースを正しくつかみきれなかったことが敗因でした。

また、午後Ⅱ対策を優先した分、午後Ⅰ対策がおろそかになりました。直前の追い込みは午後Ⅰを優先しましたが、カバーしきれませんでした。

午後問題は国語の問題(出題者の意図を読み取る)の側面もあり、過去問題の練習量がものを言います。私の場合、平成24~31年度を一通り解き、一部は2周目にも取り組みましたが、それでも量が足りていませんでした。

早いうちから取り組んだ割に勉強時間の積み上げには苦戦しました。ただ、この勉強時間に知識の整理を兼ねたブログ執筆時間は含まれていません。この執筆時間分も含めれば、制約のある中でかなりがんばったといえそうです。

終わりに

試験に向けた追い込み中、こんなツイートをしていました。

追い込まれて自棄になったわけでも、諦めた言い訳でもなく、本心から今も思います。今回の試験勉強を通して生み出された記事は私の財産です。
概念データモデルのスーパータイプとサブタイプのパターン - ぱと隊長日誌
データベーススペシャリスト試験の午後問題の選び方 - ぱと隊長日誌
データベーススペシャリスト試験の解き方のコツ - ぱと隊長日誌
部分関数従属性と推移的関数従属性の定義 - ぱと隊長日誌

結果はともかく、有意義な時間を費やせたことを誇りに思います。

データベーススペシャリスト試験の解き方のコツ

この記事について

データベーススペシャリスト試験の解き方にはコツがあります。そのコツは多くの過去問に取り組む中で各自が編み出しています。

私が編み出したコツのうち、汎用的に使えそうなコツを集めてみました。もし参考になるものが1つでも見つかれば幸いです。

なお、私が解いた過去問の主な範囲は平成24~31年度となります。

心構え・準備

全部解けなくても落ち込まない・諦めない

午後問題は時間が足りないとしばしば感じました。時には全問解く前に時間切れとなることもありました。

ですが、基準点は60点となっています。つまり、6割解ければ合格を認められる実力があるということです。半分より少し解ければ合格の可能性があると考え、最後まで諦めずに頑張りましょう。

教科書の説明に納得がいかなければ他の著者の教科書もチェックしてみる

データベーススペシャリスト試験の教科書の半分は過去問解説といえます。ダウンロード提供の過去問解説を含めれば、大半が過去問解説です。

教科書の過去問解説に納得のいかないときは他の著者の教科書もチェックしてみましょう。著者によって解説の切り口が異なるため、新たな視点で気付きがあるかもしれません。また、IPAの解答例が唯一の解答とは限らないという発見をするかもしれません。

教科書の過去問解説の傾向の違いとして2冊を挙げます。リンク先は私が実際に参考とした年度版です。

データベーススペシャリスト翔泳社、著者代表:三好康之)はIPAの解答例を重視した解説となっています。

データベーススペシャリスト合格教本(技術評論社、著者:金子則彦)はIPAの解答例を絶対視せず、著者の解答例を併記しています。

持ち込める物は最大限活用する

概念データモデルのリレーションシップをきれいに描くためには定規が必須です。フリーハンドで描いた線が曲がって描き直している時間はありません。定規を用意しましょう。

また、替えのシャープペンシル、消しゴムも用意しておきましょう。シャープペンシルは事前に替え芯を詰めておくことも忘れずに。

試験開始時刻の20分前に着席する

試験監督官からの注意事項の説明を受けるため、試験開始時刻の20分前に着席します。

説明が始まってから入室すると、試験監督官から個別説明を受けることになります。個別の説明が試験開始時刻までに終わらないと、同じ部屋の受験生全員が試験開始を待たされます。試験終了時刻もその分延びますが、その後の休憩時間が短くなることを考えると、自分だけでなく他の受験生も不利益を被ることになります。

自分のためだけでなく、他の受験生の為にも集合(着席)時間を守りましょう。

全般

午前Ⅰ対策として計算問題も準備する

平成24年~令和2年の午前Ⅰを対象に計算問題(もしくは類する問題)を集計したところ、平成24年平成28年は2,3問だったのが、平成29年以降は4~7問と増えていました。

傾向は今後も変わる可能性がありますが、計算問題も軽視することなく対策しましょう。

問題の指示を見落とさないこと

例えば 平成29年度午後Ⅱ問2設問1(1) は足りないリレーションシップを追加する問題でした。

問題文には「マスタ・在庫領域のエンティティタイプについて、マスタ・在庫領域内及びマスタ・在庫領域とトランザクション領域間のリレーションシップを補って、図を完成させよ。」とありました。

ここで注意すべきは明示こそされていないものの、「トランザクション領域間のリレーションシップは含まない」ということです。このように明示されていない指示にも気を配る必要があります。

関数従属性

関数従属性の見極め方

関数従属とは「項目Xの値を決定すると、項目Yの値が一つに決定される」ということが成立する時で、X→Yと表記されます。
「項目Yの値が一つに決定される」というのがポイントで、項目Yの値が複数決定する場合は関数従属性がありません。

○ 関数従属性が存在する場合の表現

「梱包ID:梱包を一意に識別するID」
梱包IDが決まれば梱包に関する属性が決まる。

「一つのラベルには、高々一つの手順書が対応付けられる。」
ラベルIDが決まれば手順書IDが決まる。
ただし、"高々" とは "多くとも" と同義であり、ラベルIDが決まっても対応する手順書IDが存在しないこともあります。被決定項が存在しないケースもある関数従属性が妥当であるかは議論の余地がありそうですが、過去の出題では関数従属性ありと判断しています(平成24年度午後Ⅰ問1設問1)。

× 関数従属性が存在しない場合の表現

「一つの手順書には、用途に応じて0個以上のラベルが対応付けられる。」
手順書IDが決まってもラベルIDが一つに決まるとは限らず、複数のラベルが対応することもある。

相互に関数従属性を持っている属性は推移的関数従属性において同じものとみなす

平成25年度午後Ⅰ問1設問2(1) の推移的関数従属性の問題を例に挙げます。

関数従属性の図からは以下のような関係が読み取れました。
{プロバイダID, サービス機能ID, 利用者ID} → {リソースID} ⇔ {URI} → {リソース種別, リソース名称, 配信スキーマ}

"{リソースID} ⇔ {URI}" は "{リソースID} → {URI}" かつ "{URI} → {リソースID}" であることを表現しています。

相互に関数従属性を持っている属性は推移的関数従属性において同じものとみなし、推移的関数従属性は以下の2つとなります。

{プロバイダID, サービス機能ID, 利用者ID} → {リソースID} → {リソース種別, リソース名称, 配信スキーマ}

{プロバイダID, サービス機能ID, 利用者ID} → {URI} → {リソース種別, リソース名称, 配信スキーマ}

関係スキーマ

概念データモデルと関係スキーマは番号を振って対応付ける

問題を解く中で概念データモデルと関係スキーマを繰り返し参照しますが、初見だとその位置関係などが頭に入っておらず、図から探し回ることがあります。参照回数が多いため、探し回ることによる時間ロスが無視できないほど大きくなります。

そこで、概念データモデルと関係スキーマに番号を振って対応付けします。お勧めはまず関係スキーマで上から順に番号を振り、それと対応する概念データモデルに番号を記入する方法です。余裕があれば問題文で登場する関係スキーマにも対応する番号を記入してもよいでしょう。

テーブル構造に対しても同じテクニックを使うことができます。ただし、関係スキーマとテーブル構造は必ずしも1:1とは限らない(変換の過程で分割・結合を行うことがある)ことに注意が必要です。

「未完成」のテーブル構造/関係スキーマ

問題で「未完成」のテーブル構造/関係スキーマを示されることがあります。穴埋め問題として出題されることがしばしばありますが、それ以外の問題を解くために出題されていない未完成部分を埋めるように求められることがあります。

平成26年度午後Ⅱ問2設問1(1) を例に挙げます。未完成の概念データモデルを完成させる出題でした。そして、未完成のテーブル構造として下図が示されていました。

【テーブル構造】

拠点(ホテルコード, ホテル予約センタ区分, ホテル名, …)
客室タイプ(客室タイプコード, 客室タイプ名, 定員, 備考)

客室(ホテルコード, 客室番号, 客室タイプコード, …)

未完成のテーブル構造に不自然な空行があることから、テーブルが追加されるであろうこと、またそれが概念データモデルに追加されることも想像できます。

ですが、このテーブル構造にはさらに未完成の部分がありました。"客室" に主キーがありません。実はこれも未完成の部分であり、概念データモデルのリレーションシップを追加するために必要な情報でした。

このように未完成の図に対しては出題の有無にかかわらず、不自然な箇所が無いか、それが実は未完成の部分でないかを見分けることが必要です。

関係スキーマの属性で主キーが先頭に並ぶとは限らない

関係スキーマの属性で主キーは先頭に並ぶことが多く、解答のヒントになります。ですが、これに反する記述のこともあるので、過信しないことが必要です。

平成25年度午後Ⅰ問1図1 で提示されていた関係スキーマです。

組織(組織ID, 組織名称, 郵便番号, 組織登録日付)

一見すると属性名称及び順序から "組織" の主キーは {組織ID} となりそうです。ですが、「表1 属性とその意味及び制約」で組織登録日付は『組織情報を登録、変更した日付。組織情報(組織名称、郵便番号)は、履歴が管理される。』とあり、"組織" の主キーは {組織ID, 組織登録日付} であったことが分かります。

属性名は具体的に命名する

例えば「社員コード」を参照する属性(外部キー)を命名する際に、「社員コード」のままとするか、「技術営業社員コード」のようにより具体的な命名とするべきか、悩むことがあります。

どちらが好ましいかは問題に付属する表記ルールに記載がありませんし、手持ちのテキスト2冊を確認しても明確な判断基準は示されていませんでした。また、解答例からもその基準を読み取ることができませんでした。

そこで、判断に迷った際は属性名をより具体的に命名するほうが好ましい、と考えることにしました。私のDAとしての師匠からも、項目名だけで項目の意味を分かるようにすべきと指導を受けてきたからです。

仮に具体的に命名しすぎて減点のリスクがあるとしても、逆に抽象的過ぎて減点されるリスクも考えられます。よって、このリスクを気にしすぎるのは妥当でないと判断しました。

概念データモデルと関係スキーマの対応関係を見直す

概念データモデルと関係スキーマは同時に出題されることが多いです。

概念データモデルの出題としては不足しているエンティティタイプやリレーションシップを追加することが求められます。一通り解き終えた後は関係スキーマとの対応関係を確認し、描き漏らしたエンティティタイプやリレーションシップが無いことを確認します。

複数のサブタイプを参照する際は共通のスーパータイプとリレーションシップを設定する

平成31年度午後Ⅱ問1設問1(1) を例に挙げます。

問題文には以下の記載がありました。
『内製成型材料には、そのレシピとして、1回の製造に使用する、幾つかの品目(生地材料又は原材料)とその使用量を設定する。』

【概念データモデル】

共通のスーパータイプとリレーションシップを設定した概念データモデル

概念データモデルで "生地材料" と "原材料" は "貯蔵品目" のサブタイプとなっています。この場合、"成形材料レシピ" と "貯蔵品目" の間にリレーションシップを設定します。

テーブル構造の穴埋め問題は同じようなテーブルをヒントにする

テーブル構造の穴埋め問題では同様の意味・構成を持つテーブルが他に無いか、有ればそれをヒントに解けないかを考えます。

平成30年度午後Ⅱ問1設問1(1) を例にします。"一般経費申請" と "仮払金申請" のテーブル構造と業務の流れが似ています。ここから、"仮払金申請" の穴埋め箇所には "一般経費申請" と同様の項目が入ると推測できます。

親エンティティの主キー兼外部キーを引き継いだ時、子エンティティに外部キー参照を設定しなくてよい

平成25年度午後Ⅱ問2 を例に挙げます。

【関係スキーマ

店舗(店舗コード, …)
販売(店舗コード, 販売年月日, 販売連番, …)
販売明細(店舗コード, 販売年月日, 販売連番, 販売明細番号, …)

【概念データモデル】

外部参照を持つ親エンティティと子エンティティの概念データモデル

"販売" の主キーの一部である "店舗コード" は "店舗.店舗コード" を外部キー参照しています。

"販売" の子エンティティである "販売明細" は "販売" の主キーを引き継ぎますが、"販売明細.店舗コード" で "店舗.店舗コード" を外部キー参照することはありません。これは親エンティティの "販売.店舗コード" で "店舗.店舗コード" を外部キー参照して参照整合性制約を保証しており、子エンティティはその保証も引き継ぐからです。

連関エンティティの主キーは関連するエンティティの主キーで構成されるとは限らない

連関エンティティの主キーは関連するエンティティの主キーを組み合わせて構成されることが多いですが、必ずしもそうとは限らないことに注意が必要です。

平成24年度午後Ⅱ問2設問2 を例に挙げます。

【関係スキーマ

コース料理(コース料理商品コード, 料理分野コード)
コース料理用プレート(コース料理用プレートコード
コース料理構成(コース料理商品コード, 明細番号, コース料理用プレートコード

【概念データモデル】

連関エンティティの概念データモデル

連関エンティティである "コース料理構成" の主キーは "コース料理" と "コース料理用プレート" の主キーを組み合わせて {コース料理商品コード, コース料理用プレートコード} とするのが定番です。ですが、ここでは問題文で "コース料理構成" の主キーとして {コース料理商品コード, 明細番号} という構成が与えられていました。そこで、"コース料理用プレートコード" は外部キーとして定義されることになりました。

物理設計

概念データモデルとテーブル構造でリレーションシップが一致するとは限らない

概念データモデルをテーブル構造へ変換するのには様々なパターンがあります。大まかなパターンを示した記事がありますので参照ください。
スーパータイプ/サブタイプのテーブルへの実装 - Qiita

概念データモデルからテーブル構造への変換に際し、リレーションシップに差異が出た例として、平成25年度午後Ⅱ問1設問1(1) を例に挙げます。

【概念データモデル】

サブタイプを持つ概念データモデル

【テーブル構造】

調達先(調達先コード, 仕入先区分, 支払先区分, 支払先コード, …)

概念データモデルでは "調達先" というスーパータイプと、"支払先" と "仕入先" というサブタイプがあります。これをテーブル構造へ変換する際、"調達先" というテーブルにまとめています。

概念データモデルで "仕入先.支払先コード" から "支払先.調達先コード" を参照していたリレーションシップがありました。これはテーブル構造へ変換した際、"調達先.支払先コード" から "調達先.調達先コード" へのリレーションシップとなりました。

このように概念データモデルとテーブル構造の変換でリレーションシップの接続も変わることがあることに注意します。

関係スキーマとテーブル構造を混同しない

関係スキーマとテーブル構造を同一問題で取り上げることがあります。表記だけではいずれであるかを識別できないので、図の説明から「関係スキーマ」と「テーブル構造」のどちらであるかを判断してください。

平成26年度午後Ⅰ問3 を例に挙げます。この問題の図1で関係スキーマを、図2でテーブル構造を示していました。同じ "商品" でも概念データモデル⇒テーブル構造の変換(この例ではサブタイプをスーパータイプに統合)によって構成が異なっています。

【関係スキーマ

商品(商品番号, 商品名, 商品説明, 写真, 販売単価, 表示順)
単品商品(商品番号, 社内原価)
セット商品(商品番号, 化粧箱番号, 詰合せ日数)

【テーブル構造】

商品(商品番号, 商品名, 商品説明, 写真, 販売単価, 表示順, 単品区分, 社内原価, 化粧箱番号, 詰合せ日数)

冷静にみれば判断できることでも、時間に追われると混同しがちなので気を付けましょう。

計算問題は端数に注意

試験では電卓を利用できないため、計算結果は計算しやすい数字になることがほとんどです。大きい数字の割り算で変な端数が出た時は計算ミスの可能性を疑ってみても良いかもしれません。

データ所要量の計算でありがちなミスを以下に挙げます。

  • NULL識別用のフラグのサイズを含め忘れた。
    • 問題文で NOT NULL 制約を指定しない列にはNULL識別用の1バイトのフラグを付加すると指示される。
  • 空き容量率を考慮に入れ忘れた。

集約関数の対象が0行やNULLを含む場合の結果に注意

集約関数の対象行が0行やNULLを含む場合、結果として0ではなくNULLを返されることがあります。

参考記事を挙げます。
NULLと戯れる: 集約関数とNULL - Qiita

更新情報

2020/10/11

「概念データモデルと関係スキーマは番号を振って対応付ける」を追加しました。

2020/10/14

「サブタイプを見抜く」を追加しました。

2020/10/15

「サブタイプを見抜く」を別記事(概念データモデルのスーパータイプとサブタイプのパターン - ぱと隊長日誌)へ移動しました。

2020/10/26

以下の項目を追加しました。

  • 持ち込める物は最大限活用する
  • 試験開始時刻の20分前に着席する
  • 午前Ⅰ対策として計算問題も準備する