ホーム > データベーススペシャリスト試験 > 2014年
データベーススペシャリスト試験 2014年 午後1 問01
データベースの設計に関する次の記述を読んで, 設問1〜3に答えよ。
A社は, ソフトウェアパッケージの開発及び販売を主力事業としている会社である。 A社ではこれまで, ソフトウェアの開発中に発生したバグの管理に表計算ソフトを用いてきたが, 大規模なBソフトウェアパッケージ開発プロジェクト (以下, Bプロジェクトという)の立上げを機に、新たにバグ管理システムを構築することになった。バグ管理システムの設計担当には, C君が任命された。
〔Bプロジェクトの概要〕
Bプロジェクトの概要は,次のとおりである。
(1) 組織は,階層構造の複数のチーム編成である。
(2) チームは,チームID で一意に識別され, チーム名, リーダを任されたメンバ,上位階層のチームが定められている。
(3) メンバは,メンバ ID で一意に識別され, 所属するチームが定められている。 メンバは,主担当として必ず一つのチームに所属するほか、他の一つ又は複数のチームを兼任する場合もある。
(4) 開発モデルは, ウォータフォールモデルを採用している。 開発工程は, 工程 IDで一意に識別され, 工程名, 工程の順序番号が定められている。
(5) 各開発工程では,設計書, ソースコードなどの様々な成果物が作成される。 成果物は,成果物 ID で一意に識別される。 成果物には, 成果物名, 成果物の作成工程,作成担当チームが記される。
〔バグ管理の概要〕
Bプロジェクトにおけるバグ管理の概要は,次のとおりである。
(1) ソフトウェアのテストを実施し, 期待するテスト結果と実際のテスト結果にかい離があり、何らかの対応が必要と考えられる現象をバグと呼ぶ。
(2) バグ種別とは, バグの原因を分類するための区分であり, バグ種別名及び成果物の修正有無が定められている。
(3) バグが発見されたら, 表1のプロセスに従って解決する。
(4) ソフトウェアの品質分析を行うメンバは,登録されたバグの集計及び分析を行う。品質分析の対象とするバグは、成果物の修正が必要なバグ種別が設定されたバグである。

〔データモデルの設計〕
C 君は,バグ管理システムの構築に当たり,具体例を用いて, 概念データモデル (図1)及び関係スキーマ (図2) の設計を行った。



図2の関係スキーマの主な属性とその意味 制約を表2に示す。図4は,図3の関数従属性の表記法に従って,関係 “優先度” の属性間の関数従属性を示したもの である。表 3〜5 は,関係 “バグ”, “工程”, “バグ種別” の具体例である。





〔D 部長の指摘事項〕
C君の上司のD部長はC君が設計した内容をレビューし、次の指摘をした。
指摘事項① 図1は, リレーションシップが記入されていない。 また, 図2の関係スキーマの一部も未記入である。
指摘事項② 関係 “チーム”, “メンバ”には, プロジェクトの組織構造の一部を管理できない不具合がある。
指摘事項③ 成果物と, バグの修正を行ったときに修正した成果物の情報を管理する関係スキーマが設計されていない。
〔バグの集計及び分析〕
C君は, バグの集計及び分析を行う際に使用する, 関係 “バグ”, “工程”, “バグ種別” に対する検索内容と関係代数演算について検討した。 表 6は、関係代数演算の表記法を示したものであり,表7は,表 3〜5の具体例を用いて検討した検索内容及び関係代数演算である。


解答に当たっては,巻頭の表記ルールに従うこと。 関係スキーマの解答に当たっては,主キー及び外部キーを明記せよ。
設問1(1):図2及び図4の関係 “優先度” について,(1),(2)に答えよ。
関係“優先度” の候補キーを全て答えよ。 また, 部分関数従属性,推移的関数従属性の有無を, “あり” 又は “なし” で答えよ。“あり”の場合は,その関数従属性の具体例を、図3中の意味の欄に示した表記法に従って示せ。
模範解答
候補キー:{緊急度コード, 重大度コード}
部分関数従属性の有無:あり
推移的関数従属性の有無:あり
部分関数従属性:
・緊急度コード → スケジュール影響度
・重大度コード → ソフトウェア影響度
推移的関数従属性:
{緊急度コード,重大度コード} → 優先度コード → リソース投入度
解説
ポイント整理
本問では,関係“優先度”の以下の論点を押さえる必要があります。
- 候補キー(最小キー)の決定
- 部分関数従属性の有無と具体例
- 推移的関数従属性の有無と具体例
1. 関係“優先度”の構成
まず,関係“優先度”の属性を改めて整理します(表2の記述と図2,図4より)。
図4(関係“優先度”の関数従属性)から導かれる主な関数従属性は次のとおりです。
a. 緊急度コード → スケジュール影響度
b. 重大度コード → ソフトウェア影響度
c. {緊急度コード, 重大度コード} → 優先度コード
d. 優先度コード → リソース投入度
b. 重大度コード → ソフトウェア影響度
c. {緊急度コード, 重大度コード} → 優先度コード
d. 優先度コード → リソース投入度
2. 候補キーの決定
候補キーの条件は,
- 関係内のすべての属性を一意に決定できる
- 最小性(不要な属性を含まない)
を満たすことです。
- 緊急度コードだけでは,ソフトウェア影響度や優先度コード,リソース投入度を決定できません。
- 重大度コードだけでも同様です。
- {緊急度コード, 重大度コード} の組合せであれば,図4の c/a/b から,スケジュール影響度・ソフトウェア影響度・優先度コードが決まり,さらに優先度コード→リソース投入度(d)によって関係内の全属性を決定できます。
- また,この組合せを構成要素のいずれか一方だけに減らすと決定能力を失うため,最小性も満たします。
→ 候補キー:{緊急度コード, 重大度コード}
3. 部分関数従属性の有無と具体例
部分関数従属性とは,候補キーの「真部分集合」で非キー属性を決定している関数従属性のことです。
本関係の候補キーは {緊急度コード, 重大度コード} なので,その真部分集合は {緊急度コード}/{重大度コード} になります。
本関係の候補キーは {緊急度コード, 重大度コード} なので,その真部分集合は {緊急度コード}/{重大度コード} になります。
図4の a/b より,
- 緊急度コード → スケジュール影響度
- 重大度コード → ソフトウェア影響度
は,それぞれ候補キーの一部だけで非キー属性を決定しているため,**部分関数従属性が「あり」**となります。
【具体例(図3中の表記法)】
緊急度コード → スケジュール影響度
重大度コード → ソフトウェア影響度
緊急度コード → スケジュール影響度
重大度コード → ソフトウェア影響度
4. 推移的関数従属性の有無と具体例
推移的関数従属性とは,A→B,B→C のように,キーから非キー属性を経由してさらに別の非キー属性を決定しているケースです。
本関係では,
- {緊急度コード, 重大度コード} → 優先度コード
- 優先度コード → リソース投入度
の組合せにより,「候補キー」→「非キー属性(優先度コード)」→「別の非キー属性(リソース投入度)」という推移的依存が存在します。
したがって,**推移的関数従属性が「あり」**です。
したがって,**推移的関数従属性が「あり」**です。
【具体例(図3中の表記法)】
{緊急度コード, 重大度コード} → 優先度コード
優先度コード → リソース投入度
{緊急度コード, 重大度コード} → 優先度コード
優先度コード → リソース投入度
5. 受験上の留意点
- 「候補キー」には必ず最小性が求められることを忘れない。
- 部分関数従属性は第二正規形(2NF)違反,推移的関数従属性は第三正規形(3NF)違反の典型例。
- 図4の矢印が示す関数従属性をもれなく読み取る練習が重要。
- 「優先度コード」だけで候補キーと誤解しやすいが,それ単独では「スケジュール影響度」「ソフトウェア影響度」を決定できない点を確認する。
以上のポイントを押さえれば,本問の設問意図を正しく理解して解答できます。
設問1(2):図2及び図4の関係 “優先度” について,(1),(2)に答えよ。
関係“優先度”は,第1正規形, 第2正規形, 第3正規形のうち、どこまで正規化されているかを答えよ。 また, 第3正規形でない場合は,第3正規形に分解した関係スキーマを示せ。
模範解答
正規形:第1正規形
関係スキーマ:
緊急度(緊急度コード, スケジュール影響度)
重大度(重大度コード, ソフトウェア影響度)
優先度変換(緊急度コード, 重大度コード, 優先度コード)
優先度(優先度コード, リソース投入度)
解説
1. キーワード・論点整理
2. なぜ「第1正規形」止まりなのか
- 【問題文】図4より,関係“優先度”には上表の4本の関数従属性が成り立つことが読み取れる。
- 主キー候補は {緊急度コード, 重大度コード} であり,これは複合キーである。
- 非キー属性のうち
• スケジュール影響度 は “緊急度コード → スケジュール影響度” によって 主キーの一部(緊急度コード)にのみ依存。
• ソフトウェア影響度 は “重大度コード → ソフトウェア影響度” によって 主キーの一部(重大度コード)にのみ依存。
⇒ どちらも「部分関数従属」に該当し,第2正規形を満たさない。 - よって,「第1正規形までは満たすが,第2正規形に到達していない」と結論付けられる。
3. 第3正規形への分解
部分従属・推移従属を同時に排除するため,次の4関係に分割する。
これにより
・各関係の主キーは単一属性(または完全複合キー)で,
・非キー属性は主キー全体に完全従属し,
・非キー属性同士の推移従属も存在しない。
したがって4表とも 第3正規形 となる。
・各関係の主キーは単一属性(または完全複合キー)で,
・非キー属性は主キー全体に完全従属し,
・非キー属性同士の推移従属も存在しない。
したがって4表とも 第3正規形 となる。
4. 受験者が誤りやすいポイント
5. 試験対策まとめ
- 正規化判定の手順
① 主キー候補を列挙(複合か単一かを必ずメモ)。
② 全ての関数従属性を書き出し,部分従属 → 推移従属の順にチェック。 - 図による関数従属性の読み取り
・集合で囲われた箱は「複数属性の組」を示す。
・矢印は必ず 片方向。逆方向が成り立つとは限らない。 - 分割パターンの暗記
・「部分従属を切る」→ 主キーの一部+従属属性で別関係を作成
・「推移従属を切る」→ 従属先の非キー属性を主キーとする関係を作成 - 表示のルール
・試験解答では主キー属性に下線(あるいはタグ)を付け,外部キーは(外)など注記して明示する。 - 典型的なひっかけ
・「主キーが単一に見える名前のコードがある」=必ずしも主キーとは限らない。FD(関数従属性)を確認して判断する。
これらを押さえておけば,本問に限らず正規化問題全般に対応しやすくなります。
設問2(1):図1,図2 及び 〔D部長の指摘事項〕 について,(1)〜(4)に答えよ。
指摘事項 ① について, 図1のエンティティタイプ間のリレーションシップを全て記入せよ。 同一のエンティティタイプ間に異なる役割をもつ複数のリレーションシップが存在する場合, 役割の数のリレーションシップを表す線を記入すること。
なお,図に表示されていないエンティティタイプは考慮しなくてよい。 また,エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。
模範解答

解説
核心となるキーワード・論点整理
- エンティティタイプ:
バグ、メンバ、対応、調査、修正、確認、工程、バグ種別 - リレーションシップのパターン:
- 発見(バグ ← メンバ)
- 発見工程/作り込み工程/発見すべき工程(バグ ←→ 工程)
- 属する(バグ ←→ バグ種別)
- 実施する/担当する(バグ ←→ 対応 ←→ メンバ)
- 上位‐下位関係(対応―〈ISA〉→ 調査・修正・確認)
なぜこのリレーションシップになるか――設問文の引用と対応
-
バグ ← 発見者 ← メンバ
「バグを発見したメンバは、バグの発見日、発見した工程、発見したメンバ、発見内容を登録する。登録時のバグのステータスは『未着手』である。」
→ 1人のメンバは複数のバグを発見でき、1件のバグは必ず1人の発見者(メンバ)を持つ。 -
バグ ← 発見工程・作り込み工程・発見すべき工程 ←→ 工程
問題文でバグ属性として「発見工程ID」「作り込み工程ID」「発見すべき工程ID」が定義されている。
→ 同じ「工程」エンティティに対して、異なる役割(発見・作り込み・本来発見すべき)で3本のリレーションシップを張る。 -
バグ ← 属する ←→ バグ種別
「バグ種別とは、バグの原因を分類するための区分であり、バグ種別名及び成果物の修正有無が定められている。」
→ 1件のバグは必ず1つのバグ種別を記録し、1つのバグ種別は多数のバグを分類する。 -
バグ ← 実施する ←→ 対応 ← 担当 ←→ メンバ
「バグへの対応…対応区分ごとにメンバを1人割り当てて登録する。」
「各対応を開始したら…開始日時を、終了したら終了日時を、それぞれ更新する。」
→ バグと対応は1対多、対応とメンバも1対多の関係。 -
対応 ―〈ISA〉→ 調査/修正/確認
「バグへの対応…各作業を総称して対応と呼び、その対応がどの作業であるかを、対応区分として記録する。」
「バグの原因調査…」「バグの修正…」「バグの修正内容の確認…」
→ 対応は上位エンティティ、調査・修正・確認はサブタイプ(特殊化)として表現。
関係(リレーションシップ)一覧
以下の表は、図1上の8つのエンティティタイプ間に引くべきリレーションシップをまとめたものです。
役割名(リレーション名)と多重度は省略可能ですが、役割ごとに異なる線を引く点が重要です。
役割名(リレーション名)と多重度は省略可能ですが、役割ごとに異なる線を引く点が重要です。
※「対 応」と「調査・修正・確認」の関係は,特殊化(ISA)として線を引きます。
受験者が誤りやすいポイント
- 工程との3重リレーションシップの抜け
「発見工程ID」「作り込み工程ID」「発見すべき工程ID」の3つすべてを忘れずに線を引く。 - ISA(一般化/特殊化)の見落とし
対応と調査/修正/確認は単なる1対多ではなく,特殊化の関係になる。 - 役割名付きリレーションシップの認識不足
同一エンティティ間で異なる役割がある場合は、線を役割の数だけ引く。
試験対策として覚えておくべきポイント
- エンティティと役割:属性名やリレーションシップ名から「どのエンティティと結びつくか」を明確に読む。
- ER モデルの表現:
- 多重度や役割名は省略可でも,「異なる役割での複数線」を忘れない。
- 特殊化(ISA)は,上位‐下位関係と看做す。
- 本文から図への反映:問題文中の “~ID” 属性が示す対象先と役割名を正確に把握して関係線を引く。
これらを押さえておくと,図示漏れ・誤図示を防ぎ正確にER図を完成できます。
設問2(2):図1,図2 及び 〔D部長の指摘事項〕 について,(1)〜(4)に答えよ。
指摘事項 ① について、 図2中の(a)〜(d)に入れる属性名を答えよ。(a, bは順不同、c, dは順不同)
模範解答
a:ステータス
b:完了日
c:対応区分
d:対応メンバID
解説
模範解答のキーワードと論点整理
まず,指摘事項①で問われているのは,図2の関係スキーマ中の未記入箇所(a)~(d)に何の属性名を入れるべきか,という設計の妥当性です。
問題文中のバグ解決プロセスと,図2のスキーマ定義を照合し,どのプロセスでどの情報を登録・更新するかを整理することが解答のポイントになります。
問題文中のバグ解決プロセスと,図2のスキーマ定義を照合し,どのプロセスでどの情報を登録・更新するかを整理することが解答のポイントになります。
-
(a),(b)は関係「バグ」の属性
- (a):バグの現在の状況を示す「ステータス」
- (b):クローズ時に記録する「完了日」
-
(c),(d)は関係「対応」の属性
- (c):どの作業(原因調査・修正・確認)かを示す「対応区分」
- (d):当該対応を担当する「対応メンバID」
なぜその解答になるのか
(a)ステータス
問題文には,バグ解決プロセスの各段階でステータスを更新する記述が繰り返し登場します。
「登録時のバグのステータスは『未着手』である。」
「ステータスを『調査中』に更新する。」
「ステータスを『修正中』に更新する。」 …
これらの記述から,「バグ」リレーションには現在の処理状況を保持するための属性が必要であり,これは「ステータス」という名称で定義すべきです。
(b)完了日
最終段階のバグのクローズ時に,「完了日」を記録するプロセスがあります。
「完了日を記録し,ステータスを『クローズ済』に更新し,一連のバグ解決プロセスを完了する。」
したがって,バグがクローズされた日時を格納する属性として「完了日」が必要になります。
(c)対応区分
「対応」は,原因調査・修正・修正内容の確認という3種類の作業をまとめた総称です。
「その対応がどの作業であるかを,対応区分として記録する。」
図2の「対応」リレーション中に未記入のカラムがあり,ここに該当するのは「対応区分」です。
(d)対応メンバID
「対応区分ごとにメンバを1人割り当てて登録する。」という記述から,どのメンバがその対応を担当したかを保持する属性が必要です。
通常,担当者を示すIDとして「対応メンバID」という名称を付与します。
通常,担当者を示すIDとして「対応メンバID」という名称を付与します。
詳細:該当リレーションの再掲
受験者が誤りやすいポイント
-
「完了日」と「登録日」「開始日時」「終了日時」を混同しやすい
- 「登録時の発見日」「対応開始日時」「対応終了日時」など多数の日時項目があるため,最終クローズの「完了日」を見落としがちです。
-
「対応区分」と「対応連番」を取り違える
- 図2には既に「対応連番」があるので,新たに追加するのは「対応区分」である点を正確に区別しましょう。
-
属性名をプロセス記述に即して付ける
- 問題文中に「〜を記録する」「〜を決定する」といった表現でプロセスが定義されている箇所をそのまま属性名に転用すると正解しやすくなります。
試験対策として覚えておくべきポイント
- バグ解決プロセスの各ステップで何を「登録」「更新」するかを整理する習慣をつける。
- 概念データモデル(E-R図)からリレーションスキーマへの移行では,実業務で使用する用語をそのまま属性名に用いること。
- 複数の日時属性がある場合,プロセスの開始・終了・クローズそれぞれの目的を正しく把握しておく。
- スキーマ設計では,「キー制約」「外部キー制約」とともに,必要な非キー属性が抜けていないかをチェックリスト化すると漏れを防げる。
設問2(3):図1,図2 及び 〔D部長の指摘事項〕 について,(1)〜(4)に答えよ。
指摘事項 ②の不具合を二つ挙げ, それぞれ 25 字以内で述べよ。また,不具合を解消した関係スキーマを示せ。
模範解答
不具合:① チームの上位階層のチームを管理できない。
② メンバが兼任しているチームを複数管理できない。
関係スキーマ:チーム(チームID, チーム名, リーダメンバID, 上位チームID)
メンバ(メンバID, 氏名, 主担当チームID)
兼任(メンバID, 兼任チームID)
解説
1️⃣ キーワード・論点の整理
2️⃣ 解答になるまでの論理的プロセス
(1) 不具合①:チームの階層が表現できない
【問題文引用】
(1) 組織は,階層構造の複数のチーム編成である。
(2) チームは … 「上位階層のチームが定められている」。
(1) 組織は,階層構造の複数のチーム編成である。
(2) チームは … 「上位階層のチームが定められている」。
C 君案の “チーム” 関係
チーム(チームID, チーム名, リーダメンバID)
上位チームIDが無い ⇒ 下位チームがどの上位チームに属するか保存不可。
自己参照外部キー (上位チームID → チームID) を追加する必要がある。
自己参照外部キー (上位チームID → チームID) を追加する必要がある。
(2) 不具合②:メンバの兼任が複数保持できない
【問題文引用】
(3) メンバは … 「他の一つ又は複数のチームを兼任する場合もある」。
(3) メンバは … 「他の一つ又は複数のチームを兼任する場合もある」。
C 君案の “メンバ” 関係
メンバ(メンバID, 氏名, 担当チームID, 兼任チームID)
兼任チームID が 1 列しか無いので、第 1 正規形に反する2つのケースが発生
- 兼任が 2 件以上→列を増やす? ⇒ 可変長列はNG
- 兼任の無い行→NULL が多発
多対多関係を表す独立表(兼任)を新設し、主担当だけを “メンバ” に残すのが正解。
(3) 改善後スキーマ
「兼任」表により (メンバ×チーム) の多対多が無制限に格納でき、正規化も保てる。
3️⃣ 受験者が陥りやすいワナ
4️⃣ 試験対策まとめ
- 自己参照外部キーで組織階層や部品構成ツリーを表すのは頻出。
- 「複数可」の要求が出たら “別リレーション” を作るのが鉄則(第1正規形)。
- 橋渡し表(交差表)の主キーは「両外部キーの組合せ」。
- 問題文の要求仕様を必ず属性にマッピングする習慣を持つ。
- 正規化は「NULL 値が大量に出ないか?」「列を増減せずに拡張できるか?」でチェック。
これらを押さえておけば、組織・役割のデータモデル問題は確実に得点できます!
設問2(4):図1,図2 及び 〔D部長の指摘事項〕 について,(1)〜(4)に答えよ。
指摘事項 ③ で設計されていないとしている関係スキーマを設計せよ。
模範解答
成果物:(成果物ID, 成果物名, 作成工程ID, 作成担当チームID)
修正成果物:(バグID, 対応連番, 成果物ID)
解説
1. キーワード・論点の整理
- 指摘事項③
「成果物と, バグの修正を行ったときに修正した成果物の情報を管理する関係スキーマが設計されていない」 - 必要なリレーション
- 成果物を管理するリレーション(主キー, 属性, 外部キー)
- バグの修正対応と成果物の関係を管理するリレーション
2. なぜこの設計になるのか
(1)成果物リレーションの設計根拠
問題文より引用:
「成果物は, 成果物ID で一意に識別される。成果物には, 成果物名, 成果物の作成工程, 作成担当チームが記される。」
- 成果物ID:主キー
- 作成工程ID:工程リレーションの外部キー
- 作成担当チームID:チームリレーションの外部キー
(2)修正成果物リレーションの設計根拠
問題文より引用:
「バグの修正担当に割り当てられたメンバは,…一つ又は複数の成果物の修正を行う。修正後,修正内容と,修正した成果物を記録し…」
- 1件の「バグの修正」(バグID+対応連番) で複数の成果物を修正する可能性がある → 多対多を中間リレーションで実現
- 修正対応を特定するキー:バグID+対応連番
- 修正対象の成果物を示す:成果物ID
3. リレーションスキーマ例
以下のように主キー・外部キーを明記します。
- 「●」は主キー属性を示す
- 外部キーは参照先リレーション(参照先属性)を矢印で表記
4. 受験者が誤りやすいポイント
- 既存の「修正」リレーションは「修正内容」を管理するためのもので、「どの成果物を修正したか」を管理していない点
- 1つの修正対応で複数成果物を扱えるため、多対多を単純に「修正」リレーションに成果物IDを列挙するような設計は不適切
- 中間リレーション(修正成果物)で必ず複合主キーを設定し、外部キー制約を正しく張る
5. 試験対策として覚えておくべきポイント
- 「…が記される」「…を記録する」という文言はリレーションの属性設計要件
- 多対多の関係は中間テーブル(中間リレーション)で解消する
- リレーションスキーマには必ず主キーと外部キーを明示する
- 概念データモデル(ER図)と論理設計(リレーションスキーマ)の対応関係を意識すること
- 問題文の「指摘事項」をもれなく拾い、設計漏れがないように注意する
設問3(1):表 3〜7 及び 〔バグの集計及び分析〕 について,(1)〜(3)に答えよ。
表7中の項番 ②, ③の検索を行うためには, どのような関係代数演算を行えばよいか。 表 7 中の項番 ①の例に倣って,(e)〜(j)に入れる適切な字句を答えよ。
なお,関係代数演算の表記法は,表6に従うこと。(i, jは順不同)
模範解答
e:バグ[発見工程ID = 発見すべき工程ID]
f:バグ
g:バグ種別ID
h:バグ種別
i:修正有無
j:あり
解説
キーワードの整理
まず,表7の項番②,③で問われている関係代数演算式中の記号と模範解答を整理します。
解答が導かれる論理的な理由
項番②の選択条件 (e)
問題文より:
「バグが発見された工程と、そのバグを未発見すべきと考えられる工程が同一のバグについて、そのバグIDの値を求める。」
という検索要件です。
これを関係代数で表すには,〈バグ〉関係のうち
「発見工程ID = 発見すべき工程ID」
を満たすタプルを選択します。
したがって,選択演算子に
これを関係代数で表すには,〈バグ〉関係のうち
「発見工程ID = 発見すべき工程ID」
を満たすタプルを選択します。
したがって,選択演算子に
バグ〔発見工程ID = 発見すべき工程ID〕
を用い,その後に〔バグID〕を射影すればよいので,e は
バグ〔発見工程ID = 発見すべき工程ID〕
となります。
項番③の結合と選択条件 (f, g, h, i, j)
問題文より:
「品質分析の対象とするバグは、成果物の修正が必要なバグ種別が設定されたバグである。」
とあります。
① まず,〈バグ〉関係 f と〈バグ種別〉関係 h を
キー属性「バグ種別ID」g で結合します。
② つぎに,属性「修正有無」i が ‘あり’ j のタプルのみ抽出します。
③ 最後に〔バグID〕を射影します。
① まず,〈バグ〉関係 f と〈バグ種別〉関係 h を
キー属性「バグ種別ID」g で結合します。
② つぎに,属性「修正有無」i が ‘あり’ j のタプルのみ抽出します。
③ 最後に〔バグID〕を射影します。
これを関係代数で表すと,
( ( バグ ⨝〔バグ.バグ種別ID = バグ種別.バグ種別ID〕 バグ種別 )
〔修正有無 = 'あり'〕 )〔バグID〕
という構造になり,f~j の対応は次のとおりです。
受験者が誤りやすいポイント
- 属性名の一致を忘れない
「発見工程ID」「発見すべき工程ID」など似た語が多いため,どちらの属性同士を比較しているか要注意です。 - 結合の方向
結合演算⨝は演算子自体に順序はありませんが,どの属性をキーに結合するか明示する必要があります。 - 選択と射影の順序
・条件を絞る選択演算は,結合後でも結合前でも可能な場合がありますが,射影演算(〔バグID〕など)は最後に行い,余計な属性を除去します。 - 定数のクオート
文字列定数('あり'など)はシングルクオートで囲むことを忘れずに。
試験対策として覚えておくべきポイント
- 関係代数の基本演算(選択〈σ〉,射影〈π〉,結合〈⨝〉)の記法を正確に使い分ける。
- 選択は R〔属性 比較演算子 定数/他属性〕,射影は R〔属性リスト〕,結合は R ⨝〔R.属性 = S.属性〕 S の形式。
- ER図(概念データモデル)からリレーションスキーマを作る際は,主キー・外部キーを必ず定義し,リレーション間の関連が一目で分かるようにする。
- 「品質分析の対象となるバグ」といった業務的要件を正しく読み取り,必要な結合・選択条件を抜けなく設計する練習を積む。
設問3(2):表 3〜7 及び 〔バグの集計及び分析〕 について,(1)〜(3)に答えよ。
表7中の項番④の関係代数演算式は,どのようなバグを検索するために行うものか。k に入れる適切な字句を,工程名を含めて20字以内で,(l)に入れる適切な字句を15字以内で, それぞれ具体的に述べよ。
模範解答
k:・プログラム設計工程よりも前の工程
・基本設計又は詳細設計工程
l:原因を作り込んだ
解説
1. 解答のキーワード・論点整理
- 対象工程の特定
関係代数式中の「工程〔工程ID = 'K3'〕」は,表4より K3=プログラム設計工程 を指す。 - 前工程の抽出
「工程〔順序番号 < 順序番号〕 (工程〔工程ID = 'K3'〕)」は,プログラム設計(順序番号3)より順序番号が小さい工程,すなわち 順序番号1,2の工程(基本設計/詳細設計) を選択する。 - バグとの結合
「バグ〔作り込み工程ID = 工程ID〕」と結合することで,そのバグの作り込み工程IDが前工程に該当するものを抽出する。 - 「作り込み工程」の意味
問題文より,「作り込み工程ID」は「バグの原因を作り込んだと考えられる工程」を示す。
以上から,項番④は
「作り込み工程IDがプログラム設計より前の工程であるバグ」を検索している。
「作り込み工程IDがプログラム設計より前の工程であるバグ」を検索している。
2. 解答に至る論理的説明
2.1 関係代数式の再掲
表7 項番④の式より,
(バグ〔作り込み工程ID = 工程ID〕 ⨝
(工程〔順序番号 < 順序番号〕 (工程〔工程ID = 'K3'〕)))
〔バグID〕
2.2 各部分の意味
-
工程〔工程ID = 'K3'〕
表4より -
工程〔順序番号 < 順序番号〕 (工程〔工程ID = 'K3'〕)
「順序番号3より小さい」工程を選択 -
バグ〔作り込み工程ID = 工程ID〕
バグの「作り込み工程ID」と工程の「工程ID」が一致するタプルを結合
→ 作り込み工程が基本設計/詳細設計であるバグを取得 -
〔バグID〕(射影)
最後にバグIDだけを取り出す
3. なぜ「k=基本設計又は詳細設計工程」「l=原因を作り込んだ」か
- k:基本設計又は詳細設計工程
「プログラム設計工程よりも前の工程」を具体名で表現すると,表4の順序番号から 基本設計(1)と 詳細設計(2)です。 - l:原因を作り込んだ
問題文の「作り込み工程ID」は「バグの原因を作り込んだと考えられる工程」を示すため,具体的に「原因を作り込んだ」と記述します。
4. 受験者が誤りやすいポイント
5. 試験対策として覚えておくべきポイント
- 関係代数の基本操作
- 射影(π),選択(σ),結合(⋈)の使い方
- 表記と実データの対応
- 「工程ID = 'K3'」→ 実際の工程名・順序番号を表4から即座に引けるように
- 条件句の読み取り
- 「順序番号 < 順序番号」の左右どちらがどちらを指すか,カッコのネストも含めて文脈で正確に理解
- 設問語句の具体化
- k, lのように設問文中の抜けを埋める場合は,必ず「○○工程」「○○と考えられる」など具体的名称+意味をセットで20字以内/15字以内にまとめる
- 演算結果の意図
- 最終的に何を検索しているのか(例:前工程で原因が作り込まれたバグ)を言語化できるようにすること
これらを押さえておけば,複雑に見える関係代数演算式も,ひとつひとつの操作を辿ることで正答にたどり着けます。
設問3(3):表 3〜7 及び 〔バグの集計及び分析〕 について,(1)〜(3)に答えよ。
表3〜5の具体例について 表7中の項番 ②〜④の検索を行った場合の, (ア)〜(ウ)に入れる検索結果を表 7 中の項番 ①の例に倣って答えよ。
模範解答
ア:B1, B4
イ:B1, B4, B5
ウ:B1, B5
解説
模範解答の核心となるキーワードや論点
-
検索②
- キーワード:「発見された工程」と「発見すべき工程」が同一
- 条件:
- 発見工程ID = 発見すべき工程ID
-
検索③
- キーワード:「成果物の修正が必要なバグ種別が設定されたバグ」
- 条件:
- バグ種別ID とバグ種別表の 修正有無 = ‘あり’ を結合・抽出
-
検索④
- キーワード:「作り込み工程ID が,ある工程より順序番号の小さい工程ID と一致するバグ」
- 条件:
- 工程表から基準工程 ‘K3’ より順序番号が小さい工程ID を取得
- バグ表の 作り込み工程ID と①の工程ID が一致
解答の理由
データの参照
まず,問題文中の具体例(表3~5,および表4)から必要な箇所を抜き出します。
② 発見工程と発見すべき工程が同一のバグ
【問題文】
「バグが発見された工程と、そのバグを未発見すべきと考えられる工程が同一のバグ」
「バグが発見された工程と、そのバグを未発見すべきと考えられる工程が同一のバグ」
条件は
発見工程ID = 発見すべき工程ID
表3を見て比較すると,該当するのは B1 と B4 の2件です。
(B2~B3 は“発見すべき工程ID”が NULL,B5 は K7 ≠ K2)
(B2~B3 は“発見すべき工程ID”が NULL,B5 は K7 ≠ K2)
→ ア:B1, B4
③ 品質分析対象のバグ(成果物の修正が必要なバグ種別)
【問題文】
「品質分析の対象とするバグは、成果物の修正が必要なバグ種別が設定されたバグ」
「品質分析の対象とするバグは、成果物の修正が必要なバグ種別が設定されたバグ」
- バグ表とバグ種別表を,バグ種別ID で結合
- バグ種別表の「修正有無 = ‘あり’」を条件に抽出
表3 のバグ種別ID と,表5 の修正有無を照合すると,
- S1, S2, S4, S6 は「あり」
- S3, S5, S7 は「なし」
バグ表に戻ると,
- B1 (S2 → あり)
- B4 (S4 → あり)
- B5 (S1 → あり)
(B2 はバグ種別ID NULL,B3 は S3 → “なし” のため除外)
→ イ:B1, B4, B5
④ 作り込み工程ID が基準工程より前の工程と同じバグ
【問題文】
項番④の結合式を見ると,
項番④の結合式を見ると,
(バグ〔作り込み工程ID = 工程ID〕 ⨝
(工程〔順序番号 < 順序番号〕(工程〔工程ID = 'K3'〕)))
- 基準工程 ‘K3’ の順序番号は 3(表4)
- ‘K3’ より順序番号 < 3: K1, K2
- バグ表の 作り込み工程ID が K1 または K2 のバグを抽出
表3を参照すると,
- B1 の作り込み工程ID = K2 → 該当
- B5 の作り込み工程ID = K1 → 該当
- B4 の作り込み工程ID = K3 → 基準と同じ → 除外
→ ウ:B1, B5
受験者が誤りやすいポイント
- 発見工程ID と「作り込み工程ID」「発見すべき工程ID」を混同しない。
- NULL 値は比較条件に合致しない(=等しくない)ことに注意。
- 「品質分析対象」はあくまで “修正有無 = ‘あり’” のバグ種別である点を忘れない。
- 工程間の「順序番号」を理解せずに工程IDの文字列比較をしない(K1<K3 ではなく 1<3 の比較)。
試験対策として覚えておくポイント
- 関係代数の 選択,射影,結合 の書き方と意味を確実に理解する。
- NULL を含む比較条件の結果は FALSE(もしくは排除)になることを押さえる。
- 「工程ID と順序番号」は別属性。ソートや大小比較は順序番号で行う。
- 問題文のキーワード(例:「同一」「必要な」「基準より小さい」など)を設計した結合・抽出条件に正しく反映する。