ホーム > データベーススペシャリスト試験 > 2023年
データベーススペシャリスト試験 2023年 午後1 問01
電子機器の製造受託会社における調達システムの概念データモデリングに関する次の記述を読んで, 設問に答えよ。
基板上に電子部品を実装した電子機器の製造受託会社であるA社は, 自動車や家電などの製品開発を行う得意先から電子機器の試作品の製造を受託し、 電子部品の調達と試作品の製造を行う。 今回, 調達システムの概念データモデル及び関係スキーマを再設計した。
〔現行業務〕
1.組織
(1) 組織は,組織コードで識別し, 組織名をもつ。 組織名は重複しない。
(2) 組織は,階層構造であり,いずれか一つの上位組織に属する。
2.役職
役職は, 役職コードで識別し, 役職名をもつ。 役職名は重複しない。
3.社員
(1) 社員は, 社員コードで識別し, 氏名をもつ。 同姓同名の社員は存在し得る。
(2) 社員は,いずれかの組織に所属し, 複数の組織に所属し得る。
(3) 一部の社員は,各組織において役職に就く。 同一組織で複数の役職には就かない。
(4) 社員には, 所属組織ごとに, 業務内容の報告先となる社員が高々1 名決まっている。
4.得意先と仕入先
(1) 製造受託の依頼元を得意先, 電子部品の調達先を仕入先と呼ぶ。
(2) 得意先と仕入先とを併せて取引先と呼ぶ。 取引先は, 取引先コードを用いて識別し, 取引先名と住所をもつ。
(3) 取引先が, 得意先と仕入先のどちらに該当するかは, 取引先区分で分類している。 得意先と仕入先の両方に該当する取引先は存在しない。
(4) 仕入先は, 電子部品を扱う商社である。 A社は,仕入先と調達条件(単価,ロットサイズ, 納入可能年月日) を交渉して調達する。 仕入先ごとに昨年度調達金額をもつ。
(5) 得意先は,昨年度受注金額をもつ。
5.品目
(1) 試作品を構成する電子部品を品目と呼び, 電子部品メーカー (以下, メーカーという)が製造している。
① 品目は, メーカーが付与するメーカー型式番号で識別する。 メーカー型式
番号は, メーカー間で重複しない。
② メーカー各社が発行する電子部品カタログでメーカー型式番号を調べると,電子部品の仕様や電気的特性は記載されているが, 単価やロットサイズは記載されていない。
(2) 品目は,メーカーが付けたブランドのいずれか一つに属する。
① ブランドは,ブランドコードで識別し,ブランド名をもつ。
② 仕入先は,幾つものブランドを扱っており、 同じブランドを異なる仕入先から調達することができる。 仕入先ごとに,どのブランドを取り扱っているかを登録している。
(3) 品目は, 品目のグループである品目分類のいずれか一つに属する。 品目分類は, 品目分類コードで識別し, 品目分類名をもつ。
6.試作案件登録
(1) 得意先にとって試作とは, 量産前の設計検証, 機能比較を目的に、 製品用途ごとに,性能や機能が異なる複数のモデルを準備することをいう。 得意先からモデルごとの設計図面, 品目構成, 及び製造台数の提示を受け, 試作案件として次を登録する。
①試作案件
・試作案件は、試作案件番号で識別し, 試作案件名, 得意先, 製品用途,試作案件登録年月日をもつ。
② モデル
・モデルごとに, モデル名, 設計図面番号, 製造台数, 得意先希望納入年月日をもつ。 モデルは, 試作案件番号とモデル名で識別する。
③ モデル構成品目
・モデルで使用する品目ごとに, モデル1台当たりの所要数量をもつ。
④ 試作案件品目
・試作案件で使用する品目ごとの合計所要数量をもつ。
・通常、品目の調達はA社が行うが, 得意先から無償で支給されることがある。
この数量を得意先支給数量としてもつ。
・合計所要数量から得意先支給数量を減じた必要調達数量をもつ。
7.見積依頼から見積回答入手まで
(1) 品目を調達する際は,当該品目のブランドを扱う複数の仕入先に見積依頼を行う。
① 見積依頼には, 見積依頼番号を付与し, 見積依頼年月日を記録する。 また,どの試作案件に対する見積依頼かが分かるようにしておく。
② 仕入先に対しては, 見積依頼がどの得意先の試作案件によるのか明かすことはできないが, 得意先が不適切な品目を選定していた場合に, 仕入先からの助言を得るために, 製品用途を提示する。
③ 品目ごとに見積依頼明細番号を付与し, 必要調達数量, 希望納入年月日を提示する。
④ 仕入先に対して, 見積回答時には対応する見積依頼番号, 見積依頼明細番号の記載を依頼する。
(2) 仕入先から見積回答を入手する。 見積回答が複数に分かれることはない。
① 入手した見積回答には, 見積依頼番号, 見積有効期限, 見積回答年月日,仕入先が付与した見積回答番号が記載されている。 見積回答番号は、仕入先間で重複し得る。
② 見積回答の明細には、 見積依頼明細番号, メーカー型式番号, 調達条件,仕入先が付与した見積回答明細番号が記載されている。 回答されない品目もある。 見積回答明細番号は、仕入先間で重複し得る。
③ 見積回答の明細には、 見積依頼とは別の複数の品目が提案として返ってくることがある。その場合,その品目の提案理由が記載されている。
④ 見積回答の明細には、一つの品目に対して複数の調達条件が返ってくることがある。 例えば,ロットサイズが1,000個の品目に対して, 見積依頼の必要調達数量が300個の場合, 仕入先から, ロットサイズ 1,000個で単価 0.5円,ロットサイズ1個で単価2円,という2通りの見積回答の明細が返ってくる。
8.発注から入荷まで
(1) 仕入先からの見積回答を受けて, 得意先と相談の上、品目ごとに妥当な調達条件を一つだけ選定する。
① 選定した調達条件に対応する見積回答明細を発注明細に記録し、 発注ロット数, 指定納入年月日を決める。
② 同時期に同じ仕入先に発注する発注明細は、試作案件が異なっても、1回の発注に束ねる。
③ 発注ごとに発注番号を付与し, 発注年月日と発注合計金額を記録する。
(2) 発注に基づいて, 仕入先から品目を入荷する。
① 入荷ごとに入荷番号を付与し, 入荷年月日を記録する。
② 入荷の品目ごとに入荷明細番号を発行する。 1 件の発注明細に対して、入荷が分かれることはない。当へ引き渡す。
③ 入荷番号と入荷明細番号が書かれたシールを品目の外装に貼って, 製造担
〔利用者の要望〕
1.品目分類の階層化
品目分類を大分類 中分類 小分類のような階層的な構造にしたい。 当面は3階層でよいが、将来的には階層を増やす可能性がある。
2.仕入先からの分納
一部の仕入先から1件の発注明細に対する納品を分けたいという分納要望が出てきた。 分納要望に応えつつ、 未だ納入されていない数量である発注残ロット数も記録するようにしたい。
〔現行業務の概念データモデルと関係スキーマの設計〕
現行業務の概念データモデルを図1に, 関係スキーマを図2に示す。


解答に当たっては, 巻頭の表記ルールに従うこと。 ただし, エンティティタイプ間の対応関係にゼロを含むか否かの表記は必要ない。 エンティティタイプ間のリレションシップとして “多対多” のリレーションシップを用いないこと。 属性名は,意味を識別できる適切な名称とすること。 関係スキーマに入れる属性を答える場合,
主キーを表す下線, 外部キーを表す破線の下線についても答えること。
設問1(1):図2中の関係 “社員所属” について答えよ。
関係“社員所属” の候補キーを全て挙げよ。 なお, 候補キーが複数の属性から構成される場合は, { } で括ること。
模範解答
{社員コード, 社員所属組織コード}
{社員コード, 社員所属組織名}
解説
キーワード・論点の整理
- 候補キー(Candidate Key):関係内のタプルを一意に識別できる最小の属性集合。
- 社員所属 関係の属性例(図2より想定)
- 組織コード⇔組織名 の一意性
- 「組織は,組織コードで識別し, 組織名をもつ。 組織名は重複しない。」
⇒ 組織コードから組織名を一意に決定できる(組織コード→組織名)
⇒ 組織名から組織コードを一意に決定できる(組織名→組織コード)
- 「組織は,組織コードで識別し, 組織名をもつ。 組織名は重複しない。」
解答の論理的説明
- 社員所属を一意に識別するためには 社員 と 組織 の識別子が必要
- 「社員は, 社員コードで識別し…」
- 「組織は,組織コードで識別し…」
- 属性集合として最小限にする(最小性)
- {社員コード, 社員所属組織コード}
- 社員コード+組織コード の組み合わせで重複なくタプルを識別可能
- 組織コードから組織名が一意に決まるため、社員所属組織名を使っても同様に識別可能
- {社員コード, 社員所属組織名}
- 社員コード+組織名 の組み合わせでも重複なくタプルを識別可能
- {社員コード, 社員所属組織コード}
- 冗長性を排除
- {社員コード, 社員所属組織コード, 社員所属組織名} は最小性を欠くため候補キーに含まない
よって、候補キーは
{社員コード, 社員所属組織コード}
{社員コード, 社員所属組織名}
誤りやすいポイント
- 「社員所属組織名は重複しない」ことを見落として、組織名を候補キーに使えないと判断する
- 氏名や役職名など、重複し得る属性を含めてキーを検討してしまう
- 最小性(余分な属性を含まないこと)を忘れて
{社員コード, 社員所属組織コード, 社員所属組織名}
を挙げる
試験対策のポイント
- 候補キーの定義:一意性 と 最小性 を必ず確認する
- 関連エンティティの主キーをヒントに、関係スキーマのキーを検討する
- 問題文中の「識別」「重複しない」「識別子」などの文言は、キー設定の根拠になる
- 属性間の関数従属性(例:組織コード⇔組織名)を見つけて、キー候補を増やせるか検討する
設問1(2):図2中の関係 “社員所属” について答えよ。
関係 “社員所属” は,次のどの正規形に該当するか。 該当するものを、 ○で囲んで示せ。 また, その根拠を, 具体的な属性名を挙げて60字以内で答えよ。 第3正規形でない場合は,第3正規形に分解した関係スキーマを示せ。ここで,分解後の関係の関係名には,本文中の用語を用いること。


模範解答
正規形:第1正規形
根拠:・全ての属性が単一値をとり,候補キーの一部である “社員コード” に関数従属する “社員氏名” があるから
・全ての属性が単一値をとり,候補キーの一部である “社員所属組織コード” に関数従属する “社員所属上位組織コード” があるから
・全ての属性が単一値をとり,候補キーの一部である “社員所属組織コード” に関数従属する “社員所属上位組織名” があるから
関係スキーマ:
社員 (社員コード, 社員氏名)
社員所属 (社員コード, 組織名, 上位組織コード)
社員所属履歴 (社員コード, 所属組織コード, 役職コード, 報告先社員コード)
役職 (役職コード, 役職名)
解説
1. キーワード/論点の整理
2. なぜ「第1正規形」と判定されるのか
問題文(社員③④)より
社員は複数の組織に所属し得る。
同一組織で複数の役職には就かない。
したがって「社員コード+所属組織コード」が候補キーと読み取れる。
① 1NF 判定
すべての属性が
・社員コード
・所属組織コード
・社員氏名
・組織名
・上位組織コード
・上位組織名
と “単一値” で保持されており繰返し属性は無い。よって 1NF クリア。
すべての属性が
・社員コード
・所属組織コード
・社員氏名
・組織名
・上位組織コード
・上位組織名
と “単一値” で保持されており繰返し属性は無い。よって 1NF クリア。
② 2NF で落ちる理由(部分関数従属)
複合キー {社員コード, 所属組織コード} の 一部だけ に従属する属性が存在する。
例:
・社員氏名 → 社員コード
・組織名, 上位組織コード, 上位組織名 → 所属組織コード
これが典型的な 2NF 違反。
複合キー {社員コード, 所属組織コード} の 一部だけ に従属する属性が存在する。
例:
・社員氏名 → 社員コード
・組織名, 上位組織コード, 上位組織名 → 所属組織コード
これが典型的な 2NF 違反。
③ 3NF で落ちる理由(推移的関数従属)
上位組織名 → 上位組織コード → 所属組織コード の推移が存在するため 3NF も満たさない。
上位組織名 → 上位組織コード → 所属組織コード の推移が存在するため 3NF も満たさない。
以上から「第1正規形」が正解となる。
3. 受験者が誤りやすいポイント
4. 3NF への分解例(模範解答)
5. 試験対策まとめ
- 正規形チェック手順
① 属性が原子値か → 1NF
② 複合キーの場合 “部分関数従属” が無いか → 2NF
③ 主キー以外の属性を経由する “推移的関数従属” が無いか → 3NF - 候補キーの決定は業務ルールから読み取る。
- 2NF違反:複合キーを持つテーブルでは最頻出。
- 3NF違反:コード⇔名称など典型的。マスタ切り出しで解消。
- 午後Ⅰは“主キー下線・外部キー破線”が減点ポイントになりやすい。図・表記ルールを試験直前に再確認!
設問2(1):現行業務の概念データモデル及び関係スキーマについて答えよ。
図1 中の欠落しているリレーションシップを補って図を完成させよ。 なお,図1に表示されていないエンティティタイプは考慮しなくてよい。
模範解答

解説
模範解答の核心となるキーワード・論点整理
- エンティティ間の欠落リレーションシップ:
「試作案件品目」と「見積依頼」の間のリレーションシップ - リレーションの名称:
「要請」(見積依頼を行う主体が試作案件品目であることを表現) - カーディナリティ:
1つの試作案件品目に対して、複数の見積依頼が発生し得る(1:多)
なぜその解答になるのか
問題文中の記述を確認すると、見積依頼は「ある試作案件で使用する各品目」に対して行われることが明示されています。
“見積依頼には, 見積依頼番号を付与し, …どの試作案件に対する見積依頼かが分かるようにしておく。”【問題文 7.(1)①】
“品目ごとに見積依頼明細番号を付与し, 必要調達数量, 希望納入年月日を提示する。”【問題文 7.(1)③】
ここで「品目ごと」というのは、純粋な「品目」エンティティではなく「試作案件で使用される品目」として定義された「試作案件品目」エンティティを指しています。
したがって、概念データモデル上は次のようなリレーションシップが必要です。
したがって、概念データモデル上は次のようなリレーションシップが必要です。
この関係により、ある試作案件品目に対してどの見積依頼が行われたかを明確にモデル化できます。
受験者が誤りやすいポイント
- 「見積依頼」は「品目」ではなく「試作案件品目」を起点に行われる点
→ 単に「品目」エンティティとの関連とすると、どの試作案件の品目についての見積依頼か判別できなくなる。 - モデル構成品目(モデルごとの数量)と混同しやすい点
→ 見積依頼は「試作案件品目」単位で行うため、「モデル構成品目」ではなく「試作案件品目」へのリレーションを設ける。
試験対策として覚えておくべきポイント
- “○○依頼” や “○○発注” といったエンティティは、必ず「どの明細(品目・サービス単位)に対してか」を起点にリレーションを張る。
- 文中の「品目ごと」「モデルごと」は、そのままエンティティ名ではなく、定義済みの明細エンティティを指すことが多い。
- リレーションシップ名は業務上の動詞(例:「要請」「発注」「入荷」)を用いて、関係性がひと目で分かるようにする。
- カーディナリティは、業務要件(複数社への見積/分納の可能性など)を読み取って決定する。
設問2(2):現行業務の概念データモデル及び関係スキーマについて答えよ。
図2 中の(a)〜(e)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。
模範解答
a:試作案件番号
b:得意先支給数量, 必要調達数量
c:取引先コード, 試作案件番号
d:見積依頼番号, メーカー型式番号, ロットサイズ, 提案理由
e:見積依頼番号, 見積回答明細番号, 発注ロット数
解説
1. 模範解答のキーワード・論点整理
以下では図2中の(a)~(e)に対応する関係スキーマの抜けを、模範解答のキーワード(属性名・キー指定)と合わせて整理します。
*図2中(c)は「仕入先が取り扱うブランド」を登録する多対多の連関表です。
2. なぜこの解答になるのか ~問題文引用による論理的説明
(a) 試作案件の主キー
「試作案件は、試作案件番号で識別し…」
→ 主キーとして 試作案件番号 を下線で指定します。
「試作案件は、試作案件番号で識別し…」
→ 主キーとして 試作案件番号 を下線で指定します。
(b) 試作案件品目の追加属性
「この数量を得意先支給数量としてもつ。合計所要数量から得意先支給数量を減じた必要調達数量をもつ。」
→ 得意先支給数量, 必要調達数量 を属性として追加します。
(c) 仕入先–ブランドの多対多対応
「仕入先は、幾つものブランドを扱っており、同じブランドを異なる仕入先から調達することができる。仕入先ごとに、どのブランドを取り扱っているかを登録している。」
→ 多対多をそのまま使わず、連関表を設けます。連関表には、仕入先を識別する取引先コードと、ブランドを識別するブランドコード(図中では試作案件番号となっていますが、問題文の意図はブランドコード)が外部キーとして入ります。
(d) 見積提案の属性
「見積回答の明細には、見積依頼とは別の複数の品目が提案として返ってくることがある。その場合、その品目の提案理由が記載されている。」
「…一つの品目に対して複数の調達条件が返ってくることがある…ロットサイズ…」
→ どの見積依頼に対する提案かを示す見積依頼番号を主キーとして下線で、提案された品目を示すメーカー型式番号を外部キーで、提案条件としてロットサイズと提案理由を一般属性で持ちます。
(e) 発注明細の属性
「選定した調達条件に対応する見積回答明細を発注明細に記録し、発注ロット数…を決める。」
→ 発注明細に記録するため、対応する見積依頼→見積回答明細を示す見積依頼番号, 見積回答明細番号を外部キーで、発注明細固有の数量として発注ロット数を一般属性で持ちます。
3. 受験者が誤りやすいポイント
- (b)で「必要調達数量」をうっかり忘れやすい
- (c)で「多対多を連関表にする」ことは覚えていても、“どの属性を入れるか(取引先コード+ブランドコード)”を混同しやすい
- (d)で「提案理由」だけ入れ、ロットサイズを抜け落とすケースがある
- (e)で「見積回答明細番号」を入れずに、発注明細に紐づく見積回答を特定できない設計にしてしまう
4. 試験対策として覚えておくべきポイント
-
主キーか外部キーか一般属性か
・「~で識別する」は主キー
・「~を参照する」は外部キー
・それ以外で業務的に保持する値は一般属性 -
多対多関係は必ず連関表
・連関表には両側の主キーを外部キーとして並べる -
一対多関係は外部キーだけ
・子側の関係スキーマに親側の主キーを外部キーとして持たせる -
問題文中の数量や条件
・「得意先支給数量」「必要調達数量」「発注ロット数」「ロットサイズ」などはすべて見落としやすいので一覧化して整理する -
関係スキーマのキー表示
・主キーは下線、外部キーは破線下線で示す練習をして、設問の指定に対応できるようにしておきましょう。
設問3(1):〔利用者の要望〕 への対応について答えよ。
“1. 品目分類の階層化” に対応できるよう, 次の変更を行う。
(a):図1 の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ, どのように追加又は変更すべきかを30字以内で答えよ。
(b):図2の関係スキーマにおいて, ある関係に一つの属性を追加する。 属性を追加する関係名及び追加する属性名を答えよ。
(①、②は順不同)
模範解答
(a):・品目分類に自己参照型のリレーションシップを追加する
・品目分類に再帰リレーションシップを追加する
・品目分類から品目分類へ1対多のリレーションシップを追加する
(b):関係名:品目分類
属性名:上位品目分類コード
解説
1. キーワード・論点整理
2. 解答に至る論理的説明
2.1 問題文の確認
「品目分類を大分類 中分類 小分類のような階層的な構造にしたい。当面は3階層でよいが、将来的には階層を増やす可能性がある。」
将来階層が変化しても対応できるデータ構造が必要であり、
① 大・中・小を別エンティティに分ける方法だと階層追加時にテーブル増設が発生する。
② 品目分類エンティティ自身に“親”を示すリンクを持たせれば、階層数は可変にできる。
① 大・中・小を別エンティティに分ける方法だと階層追加時にテーブル増設が発生する。
② 品目分類エンティティ自身に“親”を示すリンクを持たせれば、階層数は可変にできる。
したがって 自己参照型(再帰)1対多リレーションシップ が最適解。
2.2 概念データモデル側 (a)
- 子の品目分類は必ず一つの親品目分類に属するため「1対多」
- “自己参照” を使うことで親―子を同一エンティティ内で表現
模範解答例
「品目分類に自己参照型のリレーションシップを追加する」(28字)
「品目分類に自己参照型のリレーションシップを追加する」(28字)
2.3 関係スキーマ側 (b)
自己参照リレーションを実装するには、品目分類表に「親を指す外部キー」を追加すればよい。
従来の主キー(品目分類コード)はそのまま。
外部キー制約: 上位品目分類コード → 品目分類(品目分類コード)
外部キー制約: 上位品目分類コード → 品目分類(品目分類コード)
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
-
階層構造をRDBで表す基本テクニック
• Adjacent List(親キー方式)
• Nested Set / Path Enumeration など
→ IPA午後Ⅰでは親キー方式(自己参照FK)が頻出。 -
自己参照リレーションシップ
• ER図:エンティティから自分自身へ 1対多
• テーブル:自テーブル内外部キー+NULL許容でルートを表す。 -
試験の制約を確認する習慣
• 「多対多は使わない」「30字以内」「主キー・外部キーの下線指定」など指示は必ず守る。
• 制約を満たさない案は即失点につながる。 -
列名の付け方
• 意味が一意に分かる名、省略し過ぎない(例:上位品目分類コード)
• FKを示す場合、名前か下線種別で見分けられるようにする。 -
将来拡張を意識した設計回答
• 要件文の “~する可能性がある” はほぼ確実にヒント。ハードコーディング的な設計はNG。
以上を押さえておけば、同種の階層化・自己参照問題で取りこぼしを防げます。
設問3(2):〔利用者の要望〕 への対応について答えよ。
“2. 仕入先からの分納" に対応できるよう, 次の変更を行う。
(a):図1の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ,どのように追加又は変更すべきかを,45字以内で答えよ。
(b):図2の関係スキーマにおいて, ある二つの関係に一つずつ属性を追加する。属性を追加する関係名及び追加する属性名をそれぞれ答えよ。
(①と②は順不同)
模範解答
a:発注明細と入荷明細との間のリレーションシップを1対1から1対多へ変更する
b:①:関係名:発注明細
属性名:発注残ロット数
②:関係名:入荷明細
属性名:入荷ロット数
解説
1. キーワード・論点整理
- 分納(partial delivery)の要望
- 「発注明細」と「入荷明細」のリレーションシップを 1:1 → 1:多 へ変更
- 関係スキーマへの属性追加
- 発注明細 … 発注残ロット数
- 入荷明細 … 入荷ロット数
2. 解答になる理由の説明
【問題文】より引用:
「一部の仕入先から1件の発注明細に対する納品を分けたいという分納要望が出てきた。分納要望に応えつつ、未だ納入されていない数量である発注残ロット数も記録するようにしたい。」
- 分納を実現するには,1件の発注明細に対して 複数回の入荷 を許容しなければなりません。
- 現行モデルでは「発注明細 ↔ 入荷明細」が1対1なので,分納した場合に2件目以降の入荷をモデル化できません。
- そこで概念データモデル上,「発注明細」と「入荷明細」のリレーションシップを 1対1から1対多へ変更 します。
- 未納数量を管理するため,発注明細に「発注残ロット数」を追加します。
- 各分納毎の入荷数量を管理するため,入荷明細に「入荷ロット数」を追加します。
3. 受験者が誤りやすいポイント
- 発注残ロット数を入荷明細側に追加してしまう
- リレーションの多重度変更を「発注 ↔ 仕入先」など別の組み合わせで考えてしまう
- 問題文の「分納」「未納数量」というキーワードと,モデリングすべき対象(発注明細・入荷明細)を結び付けられない
4. 試験対策:覚えておくべきポイント
- 「分納」「部分配達」の要件は,1対1→1対多のリレーション変更で対応
- 属性の配置先は,管理すべき情報の単位(発注単位か入荷単位か)で判断
- 問題文にある要望文を手がかりに,モデリングの変更点(多重度・属性追加)を逆算する