戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 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に示す。
データベーススペシャリスト試験(令和5年 午後1 問1 図1) ↩設問2(1) ↩設問3(1) ↩設問3(2)
 解答に当たっては、巻頭の表記ルールに従うこと。 ただし、エンティティタイプ間の対応関係にゼロを含むか否かの表記は必要ない。 エンティティタイプ間のリレーションシップとして “多対多” のリレーションシップを用いないこと。 属性名は、意味を識別できる適切な名称とすること。 関係スキーマに入れる属性を答える場合、主キーを表す下線、外部キーを表す破線の下線についても答えること。

設問1:図2中の関係 “社員所属” について答えよ。

問題文を見る
(1)関係“社員所属” の候補キーを全て挙げよ。 なお、候補キーが複数の属性から構成される場合は、{ } で括ること。

模範解答

{社員コード、社員所属組織コード} {社員コード、社員所属組織名}

解説

解答の論理構成

  1. 組織エンティティの一意性
    「組織は、組織コードで識別し、… 組織名は重複しない」─コードと名称のいずれでも一意識別が可能。
  2. 社員と組織の多対多関係
    「社員は、いずれかの組織に所属し、複数の組織に所属し得る」ため、主キーには社員も組織も必要。
  3. 行の定義
    図2の「社員所属」関係は1レコード=“ある社員がある組織に所属する”事実を保持。
  4. キー候補の導出
    (社員コード+組織コード) または (社員コード+組織名) でレコードが一意に決まり、他の属性では一意にならない。
    よって両組合せが候補キー。

誤りやすいポイント

  • 組織名はラベルと考えて非キーと決めつける。問題文で「組織名は重複しない」と明言されているため候補キーになり得ます。
  • 「社員コード」単独でキーと思い込む。複数組織に所属可能なので行が重複し、主キー要件を満たしません。
  • 上位組織や役職コードをキーに含める。所属の一意性には不要であり、正規化の観点からも冗長です。

FAQ

Q: 「社員所属上位組織コード」などを候補キーに含めても問題はありませんか?
A: 上位組織コードは業務上の付随情報であり、同一社員・組織でも変更される可能性があります。候補キーは行の一意識別に必要十分な最小属性集合に限定します。
Q: 組織名は将来変更されるかもしれません。それでも候補キーにして良いのですか?
A: 業務仕様として「組織名は重複しない」と規定されています。変更リスクとキー選択は別問題であり、仕様上一意であれば候補キーとして列挙する必要があります。
Q: 複合キーは必ず {社員コード、社員所属組織コード、社員所属組織名} の3項目ではダメですか?
A: 3項目を用いれば一意ですが、候補キーは最小性が求められます。2項目で一意になるので3項目は候補キーと認められません。

関連キーワード: 候補キー、正規化、関係スキーマ、主キー、複合キー

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:図2中の関係 “社員所属” について答えよ。

問題文を見る
(2)関係 “社員所属” は、次のどの正規形に該当するか。 該当するものを、○で囲んで示せ。 また、その根拠を、具体的な属性名を挙げて60字以内で答えよ。 第3正規形でない場合は、第3正規形に分解した関係スキーマを示せ。ここで、分解後の関係の関係名には、本文中の用語を用いること。 データベーススペシャリスト試験(令和5年 午後1 問1 設問1-2)

模範解答

正規形:第1正規形 根拠:・全ての属性が単一値をとり、候補キーの一部である “社員コード” に関数従属する “社員氏名” があるから    ・全ての属性が単一値をとり、候補キーの一部である “社員所属組織コード” に関数従属する “社員所属上位組織コード” があるから    ・全ての属性が単一値をとり、候補キーの一部である “社員所属組織名” に関数従属する “社員所属上位組織名” があるから 関係スキーマ:  社員 (社員コード、社員氏名)  組織 (組織コード、組織名、上位組織コード)  社員所属 (社員コード、所属組織コード、役職コード、報告先社員コード)  役職 (役職コード、役職名)

解説

解答の論理構成

  1. “社員所属” の構成
    “社員所属” には
    “社員コード”、“社員氏名”、“社員所属組織コード”、“社員所属組織名”、
    “社員所属上位組織コード”、“社員所属上位組織名”、
    “社員役職コード”、“社員役職名”、
    “報告先社員コード”、“報告先社員氏名”
    が含まれ、下線は “社員コード” のみです。
  2. 主キー(候補キー)の確認
    【問題文】「社員は、いずれかの組織に所属し、複数の組織に所属し得る。」
    したがって “社員コード” 単独ではレコードが一意にならず、候補キーは {社員コード, 社員所属組織コード} と {社員コード, 社員所属組織名} です(組織名も組織を一意に識別するため)。
  3. 部分関数従属の有無
    ・“社員氏名” は “社員コード” のみに関数従属。
    ・“社員所属上位組織コード” は “社員所属組織コード” のみに関数従属。
    ・“社員所属上位組織名” は “社員所属組織名” のみに関数従属。
    → 候補キーの一部に依存する属性が存在し、第1正規形止まり。
  4. 第3正規形へ分解
    関係名・属性名は本文中の用語を用いて、次の4関係に分解します(解答例と同じ)。
    ・社員( 社員コード , 社員氏名 )
    ・組織( 組織コード , 組織名 , 上位組織コード )
    ・社員所属( 社員コード , 所属組織コード , 役職コード , 報告先社員コード )
    ・役職( 役職コード , 役職名 )
    上位組織の名前は、上位組織コードで“組織”を参照すれば分かるので、“組織”に上位組織名はもたせません。報告先社員の氏名も、報告先社員コードで“社員”を参照すれば分かります。社員所属の 所属組織コード は主キーの一部であると同時に“組織”を参照する外部キー、上位組織コード・役職コード・報告先社員コード も外部キーです。
    以上で、主キーに対する部分/推移的関数従属が排除され第3正規形となります。

誤りやすいポイント

  • “社員コード” を主キーと決め打ちし、複数組織所属を見落とす。
  • 「社員氏名は社員コードに従属しているから問題ない」と考え、第2正規形の判定を忘れる。
  • “社員所属上位組織コード” と “社員所属上位組織名” が組織コードに従属する推移的依存を見逃す。
  • 分解時に “社員役職名” を元の “社員所属” に残したままにしてしまい、第3正規形に到達しない。

FAQ

Q: “社員所属組織コード” も主キーに含めないといけないのですか?
A: はい。複数組織に所属し得るため “社員コード” 単独では行が一意にならず、候補キーは “社員コード”+“社員所属組織コード” です。
Q: “組織”に上位組織名をもたせなくてよいのですか?
A: もたせません。上位組織も組織の一つなので、上位組織コードで“組織”を参照すれば組織名が分かります。上位組織名をもたせると同じ名前を重複して保持することになります。
Q: 報告先社員の氏名を保持する関係は必要ですか?
A: 不要です。報告先社員も社員なので、報告先社員コードで“社員”を参照すれば社員氏名が分かります。

関連キーワード: 第1正規形、第2正規形、第3正規形、部分関数従属、推移的関数従属

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:現行業務の概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(1)図1中の欠落しているリレーションシップを補って図を完成させよ。 なお、図1に表示されていないエンティティタイプは考慮しなくてよい。

模範解答

データベーススペシャリスト試験(令和5年 午後1 問1 設問2-1解答)

解説

解答の導き方

以下は図1の欠落しているリレーションシップを補うための、問題文からの根拠とその結論を順を追って示した解法です。各ステップで「どの記述から何が分かるか」を明示します。
  1. 取引先/得意先/仕入先の関係を確定する
    • 根拠:「得意先と仕入先の両方に該当する取引先は存在しない。」
    • 考え方:この記述は「取引先」をスーパタイプとし、「得意先」「仕入先」を排他的なサブタイプとしてモデル化すべきことを示します。したがって図1では「取引先」から「得意先」「仕入先」へ派生(サブタイプ)リレーションシップを明示します。
  2. 仕入先→取扱いブランド→品目 の関係を明確にする
    • 根拠:「仕入先は、幾つものブランドを扱っており、同じブランドを異なる仕入先から調達することができる。仕入先ごとに、どのブランドを取り扱っているかを登録している。」および「品目は、メーカーが付けたブランドのいずれか一つに属する。」
    • 考え方:仕入先とブランドの対応は中間エンティティ(取扱いブランド)で表現し、ブランドは品目に属するため、図1では「仕入先」→「取扱いブランド」→「ブランド」→「品目」という経路(取扱いブランドから品目へも線を引くことで、仕入先が扱える品目群が辿れることを示す)を補完します。
  3. 試作案件 → モデル → モデル構成品目 → 試作案件品目 の流れを確認する
    • 根拠:「モデルで使用する品目ごとに、モデル1台当たりの所要数量をもつ。」および「試作案件で使用する品目ごとの合計所要数量をもつ。...合計所要数量から得意先支給数量を減じた必要調達数量をもつ。」
    • 考え方:モデルごとの所要数量(モデル構成品目)を集約して試作案件単位の合計(試作案件品目)ができ、それが必要調達数量の起点になります。図1ではこれらの階層的な矢印(試作案件→モデル→モデル構成品目、および試作案件→試作案件品目)を明確にします。
  4. 試作案件品目/得意先 → 見積依頼 の関係を補う
    • 根拠:「見積依頼には、...どの試作案件に対する見積依頼かが分かるようにしておく。」および「品目ごとに見積依頼明細番号を付与し、 必要調達数量、 希望納入年月日を提示する。」
    • 考え方:見積依頼は内部的にどの試作案件のためかを管理する必要があるため、図1では「試作案件(または試作案件品目)」から「見積依頼」へ線を引き、かつ見積依頼の明細(見積依頼明細)が試作案件品目(必要調達数量)を起点として作られることを示します。得意先情報(どの得意先の案件か)も内部的に関連付けられるため、得意先→見積依頼の線を補います(外部の仕入先には得意先を明かさない運用ルールは別途扱いますが、概念モデル上は関連を保持します)。
  5. 見積依頼(ヘッダ/明細) ↔ 見積回答(ヘッダ/明細)の二重参照を入れる
    • 根拠:「入手した見積回答には、見積依頼番号、...が記載されている。」および「見積回答の明細には、見積依頼明細番号、メーカー型式番号、調達条件、...が記載されている。」
    • 考え方:見積回答のヘッダは見積依頼番号で見積依頼(ヘッダ)を参照し、見積回答明細は見積依頼明細番号で見積依頼明細を参照します。したがって図1では「見積依頼」→「見積回答」および「見積依頼明細」→「見積回答明細」という二重の接続を補います。これにより、回答がどの依頼・どの明細に対するものかを正確に結び付けられます。
  6. 見積回答明細 → 発注 → 発注明細 の連鎖をつなぐ
    • 根拠:「選定した調達条件に対応する見積回答明細を発注明細に記録し、発注ロット数、指定納入年月日を決める。」
    • 考え方:発注は採用した見積回答明細を基に発注明細を作るため、図1では見積回答明細から発注(ヘッダ)につなぎ、その下に発注明細を置く流れを補完します。
  7. 発注明細 → 入荷 → 入荷明細 の流れを入れる(現行ルール)およびモデル構成品目との紐付け
    • 根拠:「入荷の品目ごとに入荷明細番号を発行する。1件の発注明細に対して、入荷が分かれることはない。」および「入荷番号と入荷明細番号が書かれたシールを品目の外装に貼って、 製造担...」
    • 考え方:現行業務では発注明細単位で入荷が完了するため、図1では「発注明細」→「入荷」→「入荷明細」と直線的に結びます。さらに、どのモデルの構成品目に対する発注/入荷かを追跡するために、図1では「モデル構成品目」から発注明細および入荷明細へ繋がる線を補います。理由は、モデル構成品目の「モデル1台当たりの所要数量」が発注数・入荷数の発生源であり、発注明細/入荷明細はどのモデル分を調達・受領したかを記録する必要があるためです。
  8. 品目→見積依頼(および見積回答明細→品目)を明示する
    • 根拠:「品目を調達する際は、当該品目のブランドを扱う複数の仕入先に見積依頼を行う。」および「見積回答の明細には、...メーカー型式番号...が記載されている。」
    • 考え方:見積依頼/見積回答明細は特定の品目(メーカー型式番号)に紐づくため、図1では品目から見積依頼(ヘッダ)や見積回答明細へ矢印を引き、回答明細がどの品目についての調達条件かを示します。
以上のステップで得られる完成図(矢印の追加)は、模範解答と同等の構成になります。特に重要なのは次の2点です。
  • 「得意先」と「仕入先」は「取引先」の排他的サブタイプである(どちらか一方に属する)。
  • 「モデル構成品目(1台当たりの所要数量)」が発注・入荷の追跡の起点になるため、図1上でモデル構成品目 → 発注明細/入荷明細のリレーションシップを必ず補うこと。

誤りやすいポイント

  • 試作案件品目とモデル構成品目を混同する
    • 試作案件品目は試作案件単位の合計所要数量/必要調達数量で、モデル構成品目はモデル単位の1台当たり所要数量です。見積依頼明細は必要調達数量(試作案件品目由来)を提示します。
  • 見積依頼と見積回答の参照がヘッダと明細の両方で存在することを見落とす
    • 見積回答は見積依頼番号(ヘッダ参照)と見積依頼明細番号(明細参照)の両方を持つため、両方向の対応を図示する必要があります。
  • モデル構成品目→発注明細/入荷明細の線を入れない(トレース不可にする)
    • 発注明細や入荷明細で「どのモデル分か」を記録できなくなり、実務的に誤りになります。
  • 取引先のスーパ/サブタイプを排他的に扱わない(得意先と仕入先を同時に許容する)
    • 原文に「得意先と仕入先の両方に該当する取引先は存在しない。」とあるため、排他性を確保する必要があります。
  • 見積回答明細が別品目を提案する・同一品目で複数調達条件を返す点を無視する
    • これを無視すると見積回答明細の属性設計や発注選択の表現が不十分になります。

FAQ

Q: 見積依頼は得意先を明かさない運用になっていますが、概念モデルでは得意先と結び付けて良いですか?
A: はい。原文は「仕入先に対して、見積依頼がどの得意先の試作案件によるのか明かすことはできないが、...製品用途を提示する。」と述べています。これは外部への開示ルールであり、内部システム上は「見積依頼」がどの「試作案件(=得意先)」に対するものかを保持する必要があります。したがって概念データモデルでは得意先/試作案件と見積依頼を関連付けます(外部に送る際のマスキングは別の運用ルールとして扱います)。
Q: 見積依頼明細は「試作案件品目」と結び付けるべきですか、それとも「モデル構成品目」と結び付けるべきですか?
A: 見積依頼明細の提示項目は「必要調達数量、希望納入年月日」であり、問題文は試作案件単位で「合計所要数量」「得意先支給数量」「必要調達数量」を定義しています。したがって見積依頼明細は試作案件品目(試作案件単位の必要調達数量)を起点に作成されるのが自然です。一方でモデル構成品目(1台当たり所要数量)はその集計根拠になるため、モデル構成品目と発注/入荷との紐付けは保持しておきます。
Q: 「同時期に同じ仕入先に発注する発注明細は、試作案件が異なっても、1回の発注に束ねる。」は図示上どう表現しますか?
A: 発注(ヘッダ)には複数の発注明細を含められるため、発注ヘッダで仕入先を指定し、各発注明細が各モデル構成品目(または試作案件品目に由来する明細)を参照する構成にします。これにより異なる試作案件の品目を一つの発注に束ねる表現が可能になります(多対多を直接使わず、発注明細側で参照する設計)。

関連キーワード: スーパタイプ/サブタイプ、参照整合性、集約、トランザクション設計、エンティティ関係設計

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:現行業務の概念データモデル及び関係スキーマについて答えよ。

問題文を見る
(2)図2中の(a)〜(e)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。

模範解答

a:試作案件番号 b:得意先支給数量、必要調達数量 c:取引先コード、試作案件番号 d:見積依頼番号、メーカー型式番号、ロットサイズ、提案理由 e:見積依頼番号、見積回答明細番号、発注ロット数

解説

解答の論理構成

  1. (a) モデルの主キー
    【問題文】「モデルは、試作案件番号とモデル名で識別する。」
    よって (モデル名、試作案件番号) が複合キーになり、(a)=試作案件番号。
  2. (b) 試作案件品目の数量属性
    【問題文】「得意先支給数量」「必要調達数量」を保持するとある。
    既存項目に無いので (b)=得意先支給数量・必要調達数量。
  3. (c) 見積依頼の参照先
    ・誰に依頼したか:仕入先=取引先なので「取引先コード」が要る。
    ・どの試作案件のためか:【問題文】「どの試作案件に対する見積依頼かが分かるようにしておく。」
    よって (c)=取引先コード・試作案件番号。
  4. (d) 見積回答明細の追加列
    ・複数ロットを返す:【問題文】「ロットサイズ1,000個…ロットサイズ1個…という2通りの見積回答」。→ロットサイズ
    ・別品目の提案:【問題文】「その場合…提案理由」。→提案理由
    ・識別強化:仕入先発番の「見積回答明細番号」は重複するため、親番号「見積依頼番号」を主キー側に追加。
    ・品目を示す:【問題文】「メーカー型式番号」が明細に記載。
    よって (d)=見積依頼番号・メーカー型式番号・ロットサイズ・提案理由。
  5. (e) 発注明細の参照と数量
    ・発注明細は「選定した調達条件に対応する見積回答明細を発注明細に記録」する。→見積依頼番号・見積回答明細番号
    ・発注時に決める数量:【問題文】「発注ロット数」を保持。
    よって (e)=見積依頼番号・見積回答明細番号・発注ロット数。

誤りやすいポイント

  • 「見積回答番号」「見積回答明細番号」は仕入先内だけで一意。テーブルの主キーに直接使うと重複エラーを見落とす。
  • 見積依頼先は仕入先だが、属性名は「仕入先コード」ではなく統一語彙の「取引先コード」。
  • 発注明細で試作案件番号を持たせたくなるが、業務では「同時期に同じ仕入先に発注を束ねる」ため非キー属性になる恐れがある。外部キーは見積系に遡るのが正解。

FAQ

Q: 見積回答明細に「メーカー型式番号」が無くても親の見積依頼明細にあるのでは?
A: 【問題文】「見積回答の明細には、見積依頼明細番号、メーカー型式番号…が記載されている。」と明示されているため、明細行自身の属性として保持する必要があります。
Q: 見積依頼テーブルに得意先情報を直接入れなくて良いのですか?
A: 得意先は試作案件が保持しているので、見積依頼は「試作案件番号」を持てば間接的に得意先を特定できます。二重保持を避けることで第3正規形を維持します。
Q: 発注明細のキーを (発注番号、発注明細番号_) だけにすると何が問題ですか?
A: どの見積回答に基づく発注かを失い、トレーサビリティが途切れます。将来の監査・クレーム対応に支障が出るため外部キーを保持します。

関連キーワード: 正規化、外部キー、識別子、トレーサビリティ、多重主キー

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:〔利用者の要望〕 への対応について答えよ。

問題文を見る
(1)“1. 品目分類の階層化” に対応できるよう、次の変更を行う。  (a):図1の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ、どのように追加又は変更すべきかを30字以内で答えよ。  (b):図2の関係スキーマにおいて、ある関係に一つの属性を追加する。 属性を追加する関係名及び追加する属性名を答えよ。

模範解答

(a):・品目分類に自己参照型のリレーションシップを追加する   ・品目分類に再帰リレーションシップを追加する   ・品目分類から品目分類へ1対多のリレーションシップを追加する (b):関係名:品目分類   属性名:上位品目分類コード

解説

解答の導き方

設問の記述に「品目分類を大分類 中分類 小分類のような階層的な構造にしたい。 当面は3階層でよいが、将来的には階層を増やす可能性がある。」とあるため、分類の深さが将来可変であることを満たす設計が必要です。
ここからの考え方を段階的に示します。
  1. 可能な設計案の比較
    • 各階層(大分類・中分類・小分類)ごとに別エンティティを作ると、当面は問題なくても将来階層数が変わるたびにスキーマを変更する必要があり柔軟性に欠けます。
    • 一つのエンティティに自己参照(再帰/自己参照リレーションシップ)を持たせ、各分類が親分類を指す形にすると、任意の深さの階層を表現でき、拡張に強い設計になります。設問の「将来的には階層を増やす可能性がある」に合致します。
  2. 概念データモデルでの変更(ER上の対応)
    • 対象エンティティタイプは「品目分類」です。ここに「品目分類」自身を親とする自己参照の1対多のリレーションシップ(親:1、子:多)を追加します。
    • 親を持たない最上位分類は親参照をNULL許容とします。
    • このリレーションは「多対多」を用いず、1対多として表現できます(図1の方針に抵触しません)。
  3. 関係スキーマでの変更(物理表への反映)
    • 図2にある関係「品目分類(品目分類コード、 品目分類名)」に属性を1つ追加します。追加属性名は「上位品目分類コード」です。
    • ここで重要な参照関係は、上位品目分類コード(外部キー)が品目分類コード(主キー)を参照する、という向きです。つまり上位品目分類コード → 品目分類.品目分類コード。最上位はNULLを許容します。
    • 追加属性のデータ型は品目分類コードと同一にし、参照制約(外部キー)を設定します。運用上は親が削除された場合に上位参照をNULLにする(ON DELETE SET NULL)等のポリシーを検討します。
  4. 最終の簡潔な解答
    • (a) 品目分類に自己参照の1対多リレーションシップを追加する
    • (b) 関係名:品目分類 属性名:上位品目分類コード
      (関係表記例) 品目分類(品目分類コード、 品目分類名、 上位品目分類コード)
      上位品目分類コードは外部キーで、_品目分類コード_を参照(NULL許容)。
以上の変更で、当面の3階層と将来の階層拡張の両方に対応できます。

誤りやすいポイント

  • 「大分類/中分類/小分類を別テーブルにする」設計にして将来拡張時にスキーマ変更が必要になる点を見落とす。
  • 参照の向きを逆に記述する(誤:品目分類コードが上位品目分類コードを参照する)。正しくは「上位品目分類コード(外部キー)が品目分類コード(主キー)を参照」する。
  • ルート(最上位)の親参照をNOT NULLにしてしまい、最上位ノードを表現できなくなる。NULL許容が必要。
  • 階層検索手段を考慮しない(再帰問い合わせや補助テーブルの必要性を無視)。
  • 外部キー制約や削除時の挙動(ON DELETE)を未定義のままにし、運用で矛盾を起こす。

FAQ

Q: なぜ別テーブルで大分類/中分類/小分類を作らないのですか?
A: 将来階層数が増える可能性があるため、階層ごとにテーブルを増やすとスキーマ変更が都度必要になります。自己参照にすれば単一テーブルで任意深さを表現できます。
Q: 上位品目分類コードはNULLにしてよいですか?
A: はい。最上位の分類は親が存在しないためNULLを許容します。親削除時の扱いは業務ルールに合わせてON DELETE SET NULL等を設定します。
Q: 品目はどの階層(大・中・小)に紐付けるべきですか?
A: 業務要件次第ですが、一般には最小単位(小分類)に紐付けることが多いです。DBで葉ノードのみを許容したければ、分類に階層レベル属性を持たせるか、追加制約で葉判定を行います。

関連キーワード: 自己参照リレーションシップ、 再帰リレーション、 外部キー制約、 階層データモデリング、 再帰問い合わせ(CTE)

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:〔利用者の要望〕 への対応について答えよ。

問題文を見る
(2)“2. 仕入先からの分納" に対応できるよう、次の変更を行う。  (a):図1の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ、どのように追加又は変更すべきかを、45字以内で答えよ。  (b):図2の関係スキーマにおいて、ある二つの関係に一つずつ属性を追加する。属性を追加する関係名及び追加する属性名をそれぞれ答えよ。   (①と②は順不同)

模範解答

a:発注明細と入荷明細との間のリレーションシップを1対1から1対多へ変更する b:①:関係名:発注明細     属性名:発注残ロット数   ②:関係名:入荷明細     属性名:入荷ロット数

解説

解答の論理構成

  1. 分納ニーズの把握
    【問題文】7(2)②では「1件の発注明細に対して、入荷が分かれることはない。」と明示されていました。
    しかし〔利用者の要望〕2には「一部の仕入先から1件の発注明細に対する納品を分けたい」とあるため、この業務ルールが変更となります。
  2. 概念データモデルへの反映
    • 旧ルール:発注明細⇔入荷明細 が“1対1”。
    • 新ルール:1つの発注明細に対して複数の入荷明細を許容する“1対多”が必要。
      よって「発注明細」と「入荷明細」のリレーションシップを変更します。
  3. 関係スキーマへの反映
    (1) 入荷側
    分納単位で入荷数量を記録するため、“入荷ロット数”を入荷明細に追加。
    (2) 発注側
    分納が進むにつれて残りを把握するため、“発注残ロット数”を発注明細に追加。
  4. 追加属性の所在
    • 発注明細:発注残ロット数
    • 入荷明細:入荷ロット数

誤りやすいポイント

  • 「入荷ロット数」を発注明細に置き、「発注残ロット数」を入荷明細に置く逆配置ミス。
  • リレーションシップを“多対多”で表現してしまう誤設計。問題指示に「“多対多” のリレーションシップを用いないこと」とある。
  • 関係スキーマに追加した属性へ主キーや外部キーの下線を引き忘れる記述ミス。

FAQ

Q: 発注残ロット数はトランザクションで計算すれば良いのでは?
A: 計算でも可能ですが、【利用者の要望】で「記録するようにしたい」と明示されているため属性として保持する設計を採用します。
Q: 入荷明細側に“発注番号”“発注明細番号”が既にあるがリレーション変更は必要?
A: 既存の外部キーはそのまま利用し、多重度だけを“1対多”に読み替えます。キー構造変更は不要です。
Q: 多重度を変えただけでER図の関係線はどう描く?
A: 発注明細側に“1”、入荷明細側に“*(many)”を付ける一般的な表記で問題ありません。

関連キーワード: ER図、多重度、外部キー、トランザクション、正規化

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について