データベーススペシャリスト試験 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:図2中の関係 “社員所属” について答えよ。
(1)関係“社員所属” の候補キーを全て挙げよ。 なお、候補キーが複数の属性から構成される場合は、{ } で括ること。
模範解答
{社員コード、社員所属組織コード}
{社員コード、社員所属組織名}
解説
解答の論理構成
- 組織エンティティの一意性
「組織は、組織コードで識別し、… 組織名は重複しない」─コードと名称のいずれでも一意識別が可能。 - 社員と組織の多対多関係
「社員は、いずれかの組織に所属し、複数の組織に所属し得る」ため、主キーには社員も組織も必要。 - 行の定義
図2の「社員所属」関係は1レコード=“ある社員がある組織に所属する”事実を保持。 - キー候補の導出
(社員コード+組織コード) または (社員コード+組織名) でレコードが一意に決まり、他の属性では一意にならない。
よって両組合せが候補キー。
誤りやすいポイント
- 組織名はラベルと考えて非キーと決めつける。問題文で「組織名は重複しない」と明言されているため候補キーになり得ます。
- 「社員コード」単独でキーと思い込む。複数組織に所属可能なので行が重複し、主キー要件を満たしません。
- 上位組織や役職コードをキーに含める。所属の一意性には不要であり、正規化の観点からも冗長です。
FAQ
Q: 「社員所属上位組織コード」などを候補キーに含めても問題はありませんか?
A: 上位組織コードは業務上の付随情報であり、同一社員・組織でも変更される可能性があります。候補キーは行の一意識別に必要十分な最小属性集合に限定します。
A: 上位組織コードは業務上の付随情報であり、同一社員・組織でも変更される可能性があります。候補キーは行の一意識別に必要十分な最小属性集合に限定します。
Q: 組織名は将来変更されるかもしれません。それでも候補キーにして良いのですか?
A: 業務仕様として「組織名は重複しない」と規定されています。変更リスクとキー選択は別問題であり、仕様上一意であれば候補キーとして列挙する必要があります。
A: 業務仕様として「組織名は重複しない」と規定されています。変更リスクとキー選択は別問題であり、仕様上一意であれば候補キーとして列挙する必要があります。
Q: 複合キーは必ず {社員コード、社員所属組織コード、社員所属組織名} の3項目ではダメですか?
A: 3項目を用いれば一意ですが、候補キーは最小性が求められます。2項目で一意になるので3項目は候補キーと認められません。
A: 3項目を用いれば一意ですが、候補キーは最小性が求められます。2項目で一意になるので3項目は候補キーと認められません。
関連キーワード: 候補キー、正規化、関係スキーマ、主キー、複合キー
設問1:図2中の関係 “社員所属” について答えよ。
(2)関係 “社員所属” は、次のどの正規形に該当するか。 該当するものを、○で囲んで示せ。 また、その根拠を、具体的な属性名を挙げて60字以内で答えよ。 第3正規形でない場合は、第3正規形に分解した関係スキーマを示せ。ここで、分解後の関係の関係名には、本文中の用語を用いること。


模範解答
正規形:第1正規形
根拠:・全ての属性が単一値をとり、候補キーの一部である “社員コード” に関数従属する “社員氏名” があるから
・全ての属性が単一値をとり、候補キーの一部である “社員所属組織コード” に関数従属する “社員所属上位組織コード” があるから
・全ての属性が単一値をとり、候補キーの一部である “社員所属組織コード” に関数従属する “社員所属上位組織名” があるから
関係スキーマ:
社員 (社員コード、社員氏名)
社員所属 (社員コード、組織名、上位組織コード)
社員所属履歴 (社員コード、所属組織コード、役職コード、報告先社員コード)
役職 (役職コード、役職名)
解説
解答の論理構成
- 第1正規形の確認
【問題文】「社員は、社員コードで識別し、氏名をもつ。」など全属性が原子値なので第1正規形は満たします。 - 部分関数従属の検出
- 候補キーを “社員コード、所属組織コード” とすると
・“社員コード”→“氏名”
・“所属組織コード”→“組織名、上位組織コード”
よって候補キーの真部分集合に従属する属性があり第2正規形を満たしません。
- 候補キーを “社員コード、所属組織コード” とすると
- 第3正規形へ分解
(1) 社員(社員コード、氏名)
(2) 組織(所属組織コード、組織名、上位組織コード)
(3) 社員所属(社員コード、所属組織コード、役職コード、報告先社員コード)
(4) 役職(役職コード、役職名)
上記はすべて主キー以外の属性が主キーに完全関数従属し、かつ推移従属も持たないため第3正規形となります。
誤りやすいポイント
- 「上位組織コード→上位組織名」の推移従属性だけに注目し、第2正規形の違反を見落とす。
- “役職名” を社員所属表に残してしまい、役職コードの完全従属を分離し忘れる。
- 報告先を外部キーとして分けず、循環参照を招く実装を考えてしまう。
FAQ
Q: 「報告先社員コード」も別リレーションに分ける必要はありますか?
A: 報告先は同じ社員表の行を参照する自己参照型外部キーです。第3正規形を壊さないため、社員所属表に外部キーとして保持して問題ありません。
A: 報告先は同じ社員表の行を参照する自己参照型外部キーです。第3正規形を壊さないため、社員所属表に外部キーとして保持して問題ありません。
Q: 「上位組織コード」が NULL になる可能性は?
A: 【問題文】「いずれか一つの上位組織に属する」とあるため NULL は想定しません。最上位組織を明確にし、そこも自身より上位のコードを持つ設計が一般的です。
A: 【問題文】「いずれか一つの上位組織に属する」とあるため NULL は想定しません。最上位組織を明確にし、そこも自身より上位のコードを持つ設計が一般的です。
Q: 正規化すると検索が遅くなるのでは?
A: 検索頻度の高い結合はビューやキャッシュで対処し、保守性と一貫性を優先するのが正規化の主目的です。
A: 検索頻度の高い結合はビューやキャッシュで対処し、保守性と一貫性を優先するのが正規化の主目的です。
関連キーワード: 正規化、関数従属、候補キー、第1正規形、リレーショナルモデル
設問2:現行業務の概念データモデル及び関係スキーマについて答えよ。
(1)図1 中の欠落しているリレーションシップを補って図を完成させよ。 なお、図1に表示されていないエンティティタイプは考慮しなくてよい。
模範解答

解説
解答の論理構成
- 誰が誰に依頼するか
- 「複数の仕入先に見積依頼を行う」→「見積依頼」は「仕入先」と1対多。
- 得意先を匿名にはするが「どの試作案件に対する見積依頼かが分かるようにしておく」→「見積依頼」は「試作案件」と多対1。
- 依頼の中身
- 「品目ごとに見積依頼明細番号」→「見積依頼明細」は「見積依頼」と1対多、「品目」と多対1。
- 回答との対応
- 「仕入先から見積回答を入手」→「見積回答」は「見積依頼」と1対1。
- 「見積回答の明細には、見積依頼明細番号…」→「見積回答明細」は「見積回答」と1対多、「見積依頼明細」と多対1。
- 発注への橋渡し
- 「妥当な調達条件を一つだけ選定」→「発注」は「見積回答」に多対1、かつ「発注明細」は「見積回答明細」と1対1。
- 「同時期に同じ仕入先に発注する発注明細は…1回の発注に束ねる」→「発注」と「仕入先」は多対1。
- 入荷
- 「1件の発注明細に対して、入荷が分かれることはない」→「入荷」は「発注明細」と1対1、「入荷明細」は「入荷」と1対多。
- 取扱いブランド経由の品目
- 「仕入先は、幾つものブランドを扱っており…」→「取扱いブランド」は「仕入先」と1対多、「ブランド」と1対多。
- 「取扱いブランド」から「品目」は多対多を避けて“取扱いブランド→品目”を1対多(品目側が外部キー)。
- モデル系統
- 「試作案件」→「モデル」→「モデル構成品目」は全て1対多。
- 「モデル構成品目」→「品目」は多対1。
- 試作案件品目
- 「試作案件で使用する品目ごとの合計所要数量」→「試作案件品目」は「試作案件」と多対1、「品目」と多対1。
- 以上を線で結ぶと、模範解答図と一致します。
誤りやすいポイント
- 「見積回答」から直接「品目」に線を引くミス
→ 回答は“明細”で品目と結び付きます。 - 「発注」と「見積回答明細」を多対多で結ぶ誤設計
→ 選定は1件のみ。 - 「入荷」を「発注」全体にぶら下げる誤り
→ 【問題文】に “1件の発注明細に対して、入荷が分かれることはない” とあるので「発注明細」と1対1です。 - 「取扱いブランド」から「品目」への多対多を許容
→ 多対多禁止の指示あり。中間に「取扱いブランド」を置く1対多で解決。
FAQ
Q: 「得意先」を図中でどこまで引き回す必要がありますか?
A: 「見積依頼」に“どの試作案件か”を示すだけで十分です。得意先名を仕入先に伏せる業務ルールですから「得意先」と「見積依頼」は直接線を引きません。
A: 「見積依頼」に“どの試作案件か”を示すだけで十分です。得意先名を仕入先に伏せる業務ルールですから「得意先」と「見積依頼」は直接線を引きません。
Q: 「見積回答明細」から「発注」へ“1対1”と“1対多”どちらですか?
A: 「妥当な調達条件を一つだけ選定する」ため1対1です。複数条件があるのはあくまで“回答側”。選定後は単一です。
A: 「妥当な調達条件を一つだけ選定する」ため1対1です。複数条件があるのはあくまで“回答側”。選定後は単一です。
Q: 「モデル構成品目」と「発注明細」を結ぶ太線の意味は?
A: モデルの BOM(部品表)で要求された数量が、そのまま調達フェーズの発注明細に連鎖することを示します。直接リレーションを張ることでトレーサビリティを確保します。
A: モデルの BOM(部品表)で要求された数量が、そのまま調達フェーズの発注明細に連鎖することを示します。直接リレーションを張ることでトレーサビリティを確保します。
関連キーワード: 概念データモデル、エンティティリレーションシップ、外部キー設計、調達プロセス、リレーション正規化
設問2:現行業務の概念データモデル及び関係スキーマについて答えよ。
(2)図2 中の(a)〜(e)に入れる一つ又は複数の適切な属性名を補って関係スキーマを完成させよ。
模範解答
a:試作案件番号
b:得意先支給数量、必要調達数量
c:取引先コード、試作案件番号
d:見積依頼番号、メーカー型式番号、ロットサイズ、提案理由
e:見積依頼番号、見積回答明細番号、発注ロット数
解説
解答の論理構成
-
(a) モデルの主キー
【問題文】「モデルは、試作案件番号とモデル名で識別する。」
よって (モデル名、試作案件番号) が複合キーになり、(a)=試作案件番号。 -
(b) 試作案件品目の数量属性
【問題文】「得意先支給数量」「必要調達数量」を保持するとある。
既存項目に無いので (b)=得意先支給数量・必要調達数量。 -
(c) 見積依頼の参照先
・誰に依頼したか:仕入先=取引先なので「取引先コード」が要る。
・どの試作案件のためか:【問題文】「どの試作案件に対する見積依頼かが分かるようにしておく。」
よって (c)=取引先コード・試作案件番号。 -
(d) 見積回答明細の追加列
・複数ロットを返す:【問題文】「ロットサイズ1,000個…ロットサイズ1個…という2通りの見積回答」。→ロットサイズ
・別品目の提案:【問題文】「その場合…提案理由」。→提案理由
・識別強化:仕入先発番の「見積回答明細番号」は重複するため、親番号「見積依頼番号」を主キー側に追加。
・品目を示す:【問題文】「メーカー型式番号」が明細に記載。
よって (d)=見積依頼番号・メーカー型式番号・ロットサイズ・提案理由。 -
(e) 発注明細の参照と数量
・発注明細は「選定した調達条件に対応する見積回答明細を発注明細に記録」する。→見積依頼番号・見積回答明細番号
・発注時に決める数量:【問題文】「発注ロット数」を保持。
よって (e)=見積依頼番号・見積回答明細番号・発注ロット数。
誤りやすいポイント
- 「見積回答番号」「見積回答明細番号」は仕入先内だけで一意。テーブルの主キーに直接使うと重複エラーを見落とす。
- 見積依頼先は仕入先だが、属性名は「仕入先コード」ではなく統一語彙の「取引先コード」。
- 発注明細で試作案件番号を持たせたくなるが、業務では「同時期に同じ仕入先に発注を束ねる」ため非キー属性になる恐れがある。外部キーは見積系に遡るのが正解。
FAQ
Q: 見積回答明細に「メーカー型式番号」が無くても親の見積依頼明細にあるのでは?
A: 【問題文】「見積回答の明細には、見積依頼明細番号、メーカー型式番号…が記載されている。」と明示されているため、明細行自身の属性として保持する必要があります。
A: 【問題文】「見積回答の明細には、見積依頼明細番号、メーカー型式番号…が記載されている。」と明示されているため、明細行自身の属性として保持する必要があります。
Q: 見積依頼テーブルに得意先情報を直接入れなくて良いのですか?
A: 得意先は試作案件が保持しているので、見積依頼は「試作案件番号」を持てば間接的に得意先を特定できます。二重保持を避けることで第3正規形を維持します。
A: 得意先は試作案件が保持しているので、見積依頼は「試作案件番号」を持てば間接的に得意先を特定できます。二重保持を避けることで第3正規形を維持します。
Q: 発注明細のキーを (発注番号、発注明細番号_) だけにすると何が問題ですか?
A: どの見積回答に基づく発注かを失い、トレーサビリティが途切れます。将来の監査・クレーム対応に支障が出るため外部キーを保持します。
A: どの見積回答に基づく発注かを失い、トレーサビリティが途切れます。将来の監査・クレーム対応に支障が出るため外部キーを保持します。
関連キーワード: 正規化、外部キー、識別子、トレーサビリティ、多重主キー
設問3:〔利用者の要望〕 への対応について答えよ。
(1)“1. 品目分類の階層化” に対応できるよう、次の変更を行う。
(a):図1 の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ、どのように追加又は変更すべきかを30字以内で答えよ。
(b):図2の関係スキーマにおいて、ある関係に一つの属性を追加する。 属性を追加する関係名及び追加する属性名を答えよ。
(①、②は順不同)
模範解答
(a):・品目分類に自己参照型のリレーションシップを追加する
・品目分類に再帰リレーションシップを追加する
・品目分類から品目分類へ1対多のリレーションシップを追加する
(b):関係名:品目分類
属性名:上位品目分類コード
解説
解答の論理構成
- 要望確認
「品目分類を大分類 中分類 小分類のような階層的な構造にしたい。 当面は3階層でよいが、将来的には階層を増やす可能性がある。」 - 階層化のモデル化方針
将来の階層追加に備えるには、同じエンティティ内で親と子を持たせる自己参照(再帰)1対多リレーションシップが適切です。 - 概念データモデルへの反映(設問(a))
「品目分類」→「品目分類」へ “1対多” の自己参照リレーションシップを追加する。 - 関係スキーマへの反映(設問(b))
「品目分類」に外部キー “上位品目分類コード” を追加し、主キー “品目分類コード” がその外部キーを参照する形にすることでツリー構造を表現します。
誤りやすいポイント
- 大分類・中分類・小分類を別エンティティに分けてしまい、将来階層が増えたときにスキーマ再設計が必要になる。
- 自己参照リレーションシップを定義せず、多対多を用いてしまう。階層は1対多で表すのが定石です。
- “上位品目分類コード” を NULL 不可にしてしまい、最上位ノードが登録できなくなる。最上位は NULL 許容にします。
FAQ
Q: 自己参照リレーションシップを追加すると循環参照になりませんか?
A: 主キー “品目分類コード” と外部キー “上位品目分類コード” の値を制御すれば循環は防げます。論理設計段階では1対多であり、物理実装時に階層整合性をチェックします。
A: 主キー “品目分類コード” と外部キー “上位品目分類コード” の値を制御すれば循環は防げます。論理設計段階では1対多であり、物理実装時に階層整合性をチェックします。
Q: 階層を検索する SQL が複雑になりませんか?
A: 階層問い合わせは WITH RECURSIVE 句(再帰 WITH 句)で簡潔に取得できます。階層の深さが不定でも同じクエリで対応可能です。
A: 階層問い合わせは WITH RECURSIVE 句(再帰 WITH 句)で簡潔に取得できます。階層の深さが不定でも同じクエリで対応可能です。
Q: “上位品目分類コード” を別テーブルに分けた方が正規化として優れていませんか?
A: 同一エンティティ内の親子関係は構造上の情報であり、第3正規形を満たします。分割すると冗長な中間テーブルが発生し可読性が下がります。
A: 同一エンティティ内の親子関係は構造上の情報であり、第3正規形を満たします。分割すると冗長な中間テーブルが発生し可読性が下がります。
関連キーワード: 階層構造、自己参照、再帰リレーションシップ、外部キー、正規化
設問3:〔利用者の要望〕 への対応について答えよ。
(2)“2. 仕入先からの分納" に対応できるよう、次の変更を行う。
(a):図1の概念データモデルでリレーションシップを追加又は変更する。 該当するエンティティタイプ名を挙げ、どのように追加又は変更すべきかを,45字以内で答えよ。
(b):図2の関係スキーマにおいて、ある二つの関係に一つずつ属性を追加する。属性を追加する関係名及び追加する属性名をそれぞれ答えよ。
(①と②は順不同)
模範解答
a:発注明細と入荷明細との間のリレーションシップを1対1から1対多へ変更する
b:①:関係名:発注明細
属性名:発注残ロット数
②:関係名:入荷明細
属性名:入荷ロット数
解説
解答の論理構成
-
分納ニーズの把握
【問題文】7(2)②では「1 件の発注明細に対して、入荷が分かれることはない。」と明示されていました。
しかし〔利用者の要望〕2には「一部の仕入先から1件の発注明細に対する納品を分けたい」とあるため、この業務ルールが変更となります。 -
概念データモデルへの反映
- 旧ルール:発注明細⇔入荷明細 が“1対1”。
- 新ルール:1つの発注明細に対して複数の入荷明細を許容する“1対多”が必要。
よって「発注明細」と「入荷明細」のリレーションシップを変更します。
-
関係スキーマへの反映
(1) 入荷側
分納単位で入荷数量を記録するため、“入荷ロット数”を入荷明細に追加。
(2) 発注側
分納が進むにつれて残りを把握するため、“発注残ロット数”を発注明細に追加。 -
追加属性の所在
- 発注明細:発注残ロット数
- 入荷明細:入荷ロット数
誤りやすいポイント
- 「入荷ロット数」を発注明細に置き、「発注残ロット数」を入荷明細に置く逆配置ミス。
- リレーションシップを“多対多”で表現してしまう誤設計。問題指示に「“多対多” のリレーションシップを用いないこと」とある。
- 関係スキーマに追加した属性へ主キーや外部キーの下線を引き忘れる記述ミス。
FAQ
Q: 発注残ロット数はトランザクションで計算すれば良いのでは?
A: 計算でも可能ですが、【利用者の要望】で「記録するようにしたい」と明示されているため属性として保持する設計を採用します。
A: 計算でも可能ですが、【利用者の要望】で「記録するようにしたい」と明示されているため属性として保持する設計を採用します。
Q: 入荷明細側に“発注番号”“発注明細番号”が既にあるがリレーション変更は必要?
A: 既存の外部キーはそのまま利用し、多重度だけを“1対多”に読み替えます。キー構造変更は不要です。
A: 既存の外部キーはそのまま利用し、多重度だけを“1対多”に読み替えます。キー構造変更は不要です。
Q: 多重度を変えただけで ER 図の関係線はどう描く?
A: 発注明細側に“1”、入荷明細側に“*(many)”を付ける一般的な表記で問題ありません。
A: 発注明細側に“1”、入荷明細側に“*(many)”を付ける一般的な表記で問題ありません。
関連キーワード: ER図、多重度、外部キー、トランザクション、正規化
