データベーススペシャリスト 2018年 午後1 問01
データベース設計に関する次の記述を読んで、設問1〜3に答えよ。
コピー機メーカの系列販売会社のX社では、販売管理システムのデータベース設計を行っている。
〔業務の概要〕
1.地域
日本全国を幾つかの地域に分割し、地域コードで識別する。
2.顧客
(1) 顧客(見込み客を含む) は、顧客コードで識別し、名称、住所、電話番号を登録する。
(2) 設置事業所 (コピー機を設置する顧客の事業所) は、顧客コードと設置事業所コードで識別し、名称、住所、その住所を基にした地域コードを登録する。
3.組織
(1) 組織は、組織コードで識別する。
(2) 組織には、コピー機を販売する営業所と、コピー機の設置と保守を行うサービスセンタ(以下、SCという)があり、組織区分で分類する。
(3) 顧客ごとに、担当営業所を決めている。 担当営業所は、組織変更によって変更する場合がある。
(4) 地域ごとに、担当SCを決めている。
4.営業担当者
(1) 営業担当者は、X社の社員であり、社員番号で識別する。
(2) 営業担当者は、いずれか一つの営業所に所属する。 所属する営業所は、人事異動によって変更する場合がある。
5.商品
(1) 商品は、商品コードで識別する。
(2) 商品には、製品と設置サービスがあり、商品区分で分類する。 製品は、コピー機メーカの物流センタから出荷し、設置サービスは、X社のSCが提供する。
(3) 製品には、単体製品とセット製品がある。
① 単体製品かセット製品かは、単体セット製品区分で分類する。
② 単体製品には、製品サイズを登録する。
(4) 単体製品には、本体製品(コピー機本体)とオプション製品がある。
① 本体製品かオプション製品かは、製品区分で分類する。
② 本体製品には、製品のシリーズを表すシリーズコードを登録する。
③ オプション製品には、給紙オプション、排紙オプションなどがあり、オプション区分で分類する。
(5) セット製品は、X社が販売用に登録する。 セット製品は、一つの本体製品と一つ以上のオプション製品を組み合わせたもので、どのオプション製品で構成されるかについて、セット製品構成に登録する。
(6) 設置サービスには複数種類があり、製品ごとに、どの設置サービスを適用するかを決めている。 設置サービスには標準設置時間を登録する。 セット製品の場合、セット製品自体で決まる設置サービスを適用し、セット製品を構成する単体製品で決まる設置サービスは適用しない。
6.見積り
(1) 顧客から見積依頼があると、担当営業所の営業担当者が見積りを行う。
(2) 見積りは、見積番号で識別し、案件名、顧客コード、担当営業所の組織コード、営業担当者の社員番号、見積年月日、納期年月日、見積有効期限年月日、商品コード、商品コードごとの数量、見積単価を登録する。
7.受注
(1) 成約に至ったときに、見積りと同じ単位で受注登録を行う。
(2) 受注は、受注番号で識別し、該当する見積番号、受注年月日を登録する。
(3) 受注明細は、設置の単位であり、本体製品1台単位、又はセット製品1セット単位に作成し、設置事業所、設置場所詳細 (設置する階・部屋の位置)、設置補足(設置に関する注意事項など) を登録する。 (5) に後述する受注明細内訳番号を登録する。
(4) 受注明細内訳には、商品コードと数量を登録する。 ただし、商品がセット製品の場合、そのセット製品自体と、セット製品を構成する製品を展開した内訳を登録する。
① 受注明細が本体製品1台単位の場合、単体製品である本体製品とオプション製品、及び必要な設置サービスをそれぞれ登録する。
② 受注明細がセット製品1セット単位の場合、次のように登録する。
・セット製品と、セット製品に必要な設置サービスをそれぞれ登録する。
・セット製品を構成する単体製品に展開し、単体製品の商品コード、展開元受注明細内訳番号 (セット製品の商品コードを登録した受注明細内訳番号)を登録する。
(5) 本体製品の受注明細内訳番号を受注明細に登録する。
〔概念データモデルと関係スキーマの設計〕
〔業務の概要〕に基づいて設計した概念データモデルを図1に、関係スキーマを図2に示す。
〔出荷指示の追加〕
販売管理システムに、次のように出荷指示の機能を追加することにした。
(1) 受注後、営業所で次のように出荷指示ができるようにする。
① 出荷指示は、コピー機メーカの物流センタから出荷する製品を対象とする。
② 同じ設置事業所、同じタイミングで出荷できる場合は、受注明細をまとめて出荷指示を行う。
(2) 出荷指示は、出荷指示番号で識別し、出荷指示年月日を登録する。
解答に当たっては、巻頭の表記ルールに従うこと。 エンティティタイプ間の対応関係にゼロを含むか否かの表記は必要ない。
なお、関係スキーマの表記では、主キー及び外部キーを明記せよ。
(1)図2中の(a)〜(k)に入れる適切な属性名を答えよ。 また、主キーを構成する属性の場合は実線の下線を、外部キーを構成する属性の場合は破線の下線を付けること。
なお、属性が組織コードの場合は、営業所組織コード、SC組織コードを区別すること。(f, eおよびg, h, iは順不同)
模範解答
a:組織区分
b:SC組織コード
c:営業所組織コード
d:営業所組織コード
e:顧客コード
f:地域コード
g:社員番号
h:営業所組織コード
i:顧客コード
j:見積番号
k:顧客コード
解説
解答の導き方
以下は図2の空欄 (a)〜(k) に入る属性名と、その根拠を問題文の記述から段階的に導いた説明です。図2の既存の属性名(例:営業所組織コード、SC組織コード)は図中の表記に合わせて使用しています。
a:組織区分
- 根拠:「組織には、コピー機を販売する営業所と、 コピー機の設置と保守を行うサービスセンタ(以下、 SCという)があり、 組織区分で分類する。」
- 解説:組織を「営業所/サービスセンタ」で区分するので、組織エンティティに分類を示す属性が必要であり、(a) は 組織区分 となります。
b:SC組織コード(外部キー)
- 根拠:「地域ごとに、 担当SCを決めている。」
- 解説:地域が担当するSCを保持するため、地域にSCを参照する属性が必要です。図2のサービスセンタ側の識別子がSC組織コード であるため、(b) はSC組織コード(外部キー)になります。
c:営業所組織コード(外部キー)
- 根拠:「営業担当者は、いずれか一つの営業所に所属する。」/「営業担当者は、X社の社員であり、 社員番号で識別する。」
- 解説:営業担当者が所属する営業所を参照する属性が必要です。営業所の識別子は 営業所組織コード なので、(c) は 営業所組織コード(外部キー)です。
d:営業所組織コード(外部キー)
- 根拠:「顧客ごとに、担当営業所を決めている。」
- 解説:顧客が担当する営業所を記録するため、顧客テーブルにも営業所を参照する属性が必要です。営業所を一意に識別するのは 営業所組織コード なので、(d) は 営業所組織コード(外部キー)とします。注意点は、親の組織を示す組織コード(組織コード)と混同せず、営業所を参照するときは営業所側の主キー名である 営業所組織コード を使うことです(図2の表記に合わせる)。
e:顧客コード(主キーの一部)
- 根拠:「設置事業所 ... は、顧客コードと設置事業所コードで識別し、名称、住所、 その住所を基にした地域コードを登録する。」
- 解説:設置事業所は 「顧客コード + 設置事業所コード」 の複合主キーで識別されます。図2の (e) はそのうちの顧客側のキーなので、(e) は 顧客コード(主キー)です。※設置事業所側のもう一方の主キーである 設置事業所コード も主キーに下線(実線)を付けるべきである点に留意してください。
f:地域コード(外部キー)
- 根拠:「その住所を基にした地域コードを登録する。」(設置事業所の説明)
- 解説:設置事業所が所属する地域を示す属性として 地域コード を登録するため、(f) は 地域コード(外部キー)です。
g:社員番号(外部キー)
h:営業所組織コード(外部キー)
i:顧客コード(外部キー)
h:営業所組織コード(外部キー)
i:顧客コード(外部キー)
- 根拠:「見積りは、見積番号で識別し、 ... 顧客コード、 担当営業所の組織コード、営業担当者の社員番号、 見積年月日、 ... を登録する。」
- 解説:見積テーブルに必要な参照項目は「顧客」「担当営業所」「営業担当者」です。図2の (g),(h),(i) は順不同と明示されているため、代表的な対応として (g)=社員番号、(h)=営業所組織コード、(i)=顧客コード を割り当てます。いずれも他表の主キーを参照する外部キーです。
j:見積番号(外部キー)
- 根拠:「受注は、受注番号で識別し、 該当する見積番号、 受注年月日を登録する。」
- 解説:受注がどの見積に基づくかを示すために 見積番号 を保持します。よって (j) は 見積番号(外部キー)です。
k:顧客コード(外部キー)
- 根拠:設置事業所が「顧客コードと設置事業所コードで識別」されること、および「受注明細は... 設置事業所」を登録すること(受注明細の属性一覧に設置事業所コードがある)。
- 解説:受注明細が設置事業所を参照するには設置事業所の複合主キー (顧客コード, 設置事業所コード) が必要です。図2の 受注明細 属性一覧には設置事業所コードがあるため、もう一方のキーである 顧客コード を (k) として設け、設置事業所を正しく参照できるようにします。したがって (k) は 顧客コード(外部キー)です。
最終的な (a)〜(k) の埋め方(主キーは実線下線、外部キーは破線下線で示す):
- a:組織区分
- b:SC組織コード
- c:営業所組織コード
- d:営業所組織コード
- e:顧客コード (設置事業所の主キーは 顧客コード と 設置事業所コード の複合)
- f:地域コード
- g:社員番号
- h:営業所組織コード
- i:顧客コード
- j:見積番号
- k:顧客コード
誤りやすいポイント
- 営業所参照の属性名を混同する:親エンティティの組織コード(組織コード)と、営業所サブタイプの主キー(営業所組織コード)を混同しやすい。営業所を参照する箇所は 図2表記に合わせて 営業所組織コード を使うこと。
- 設置事業所の主キーを忘れる:設置事業所は「顧客コード+設置事業所コード」で識別されるので、受注明細などで設置事業所を参照する際は両方必要(設置事業所コードだけでは不十分)。
- 見積の (g),(h),(i) は順不同:図2注記にある通り順序に意味はないので、属性の意味(顧客・営業所・社員)で判断する。
- 「組織区分」と「組織コード」を取り違える:分類を表す組織区分(属性)と、組織を一意に識別する組織コード(主キー)は別物。用途を明確にする。
FAQ
Q: 組織の親キーである 組織コード と 営業所組織コード はどちらを参照すべきですか?
A: 営業所を特定したい場合は 営業所側の主キーである 営業所組織コード を参照します。図2の設計ではサブタイプ(営業所)が独自の識別子を持っているため、他表は営業所組織コードを外部キーとして参照するのが整合的です。
A: 営業所を特定したい場合は 営業所側の主キーである 営業所組織コード を参照します。図2の設計ではサブタイプ(営業所)が独自の識別子を持っているため、他表は営業所組織コードを外部キーとして参照するのが整合的です。
Q: 受注明細に設置事業所コードだけあれば十分ですか?
A: いいえ。不十分です。設置事業所は 顧客コード と 設置事業所コード の複合主キーで識別されるため、受注明細が設置事業所を一意に参照するには顧客コードも必要です(これが (k) の役割です)。
A: いいえ。不十分です。設置事業所は 顧客コード と 設置事業所コード の複合主キーで識別されるため、受注明細が設置事業所を一意に参照するには顧客コードも必要です(これが (k) の役割です)。
Q: 見積の (g),(h),(i) の具体的な名前が不明なときはどう判断しますか?
A: 問題文の「見積りは... 顧客コード、 担当営業所の組織コード、 営業担当者の社員番号 ...を登録する」という列挙から、該当する3つの外部キーを割り当てればよい(どの順に入るかは図2で順不同とされている)。
A: 問題文の「見積りは... 顧客コード、 担当営業所の組織コード、 営業担当者の社員番号 ...を登録する」という列挙から、該当する3つの外部キーを割り当てればよい(どの順に入るかは図2で順不同とされている)。
関連キーワード: 主キー、外部キー、複合主キー、スーパタイプ/サブタイプ、正規化
(2)図1のリレーションシップは未完成である。 必要なリレーションシップを全て記入し、図を完成させよ。
模範解答

解説
解答の導き方
方針:図1の欠けている線は、業務説明に書かれた「誰が誰を参照するか(どのエンティティに外部キーがあるか)」を順に読み取り、図に線を引けば完成します。以下は業務本文の該当箇所を引用し(短く抜き出して)根拠を示しつつ、図1に追加すべきリレーションシップを段階的に導きます。
- 組織と営業所・サービスセンタ(サブタイプ関係)
- 根拠:「組織には、コピー機を販売する営業所と、 コピー機の設置と保守を行うサービスセンタ(以下、 SCという)があり、 組織区分で分類する。」
- 考え方:組織は親で、営業所とサービスセンタはサブタイプです。図2に「営業所」「サービスセンタ」の個別表があることも一致します。
- 図に引く線:組織 → 営業所、組織 → サービスセンタ(specialization/包含関係として描く)。
- 営業所・営業担当者と見積の関係
- 根拠:「営業担当者は、いずれか一つの営業所に所属する。」および「顧客から見積依頼があると、 担当営業所の営業担当者が見積りを行う。」さらに見積の説明に「担当営業所の組織コード、営業担当者の社員番号」を登録するとある。
- 考え方:営業担当者は営業所に属する(所属=外部キーを持つ)。見積は「担当営業所」と「営業担当者」を参照して登録される。
- 図に引く線:営業所 → 営業担当者(所属)、営業担当者 → 見積(作成者)、営業所 → 見積(担当組織を記録)。
(補助:図2の属性対応)
- 図2の「営業担当者」に (c) があり、これは所属する営業所の組織コードを示す(営業担当者 → 営業所の外部キー)。
- 見積の属性として顧客コードとともに担当営業所の組織コードと営業担当者の社員番号が登録されるため、見積は顧客・営業所・営業担当者を参照する。
- 顧客・設置事業所・地域・サービスセンタの関係
- 根拠:「設置事業所 は、顧客コードと設置事業所コードで識別し、…その住所を基にした地域コードを登録する。」かつ「地域ごとに、 担当SCを決めている。」
- 考え方:設置事業所は顧客に属し(顧客コードを持つ)、設置事業所は地域コードを持つ。地域は担当SCを参照する(図2の地域に (b) がある)。
- 図に引く線:顧客 → 設置事業所、設置事業所 → 地域、地域 → サービスセンタ。
- 補足(図2との照合):図2の「設置事業所」先頭の (e) は顧客コードに対応し、「設置事業所」に (f) がありこれは地域コードである。図2の「地域」にある (b) はSC_組織コード に相当し、地域が担当SCを参照する。
- 見積・見積明細と受注・受注明細・受注明細内訳の連鎖
- 根拠:「見積りは、見積番号で識別し、 ... 商品コード、商品コードごとの数量、 見積単価を登録する。」(見積明細がある)および「成約に至ったときに、 見積りと同じ単位で受注登録を行う。受注は、該当する見積番号、受注年月日を登録する。」さらに受注明細・内訳の説明。
- 考え方:
- 見積 → 見積明細(明細は見積番号を持つ)
- 見積明細 → 商品(商品コードを参照)
- 受注 → 見積(受注は該当見積番号を保持)
- 受注 → 受注明細、受注明細 → 受注明細内訳(内訳は受注番号+受注明細番号で参照される)
- 受注明細内訳 → 商品(内訳は商品コードを持つ)。セット製品の場合はセット自体と展開した成分の両方を内訳に登録し、成分行は展開元受注明細内訳番号でセット行に紐づく。
- 図に引く線:見積 → 見積明細、見積明細 → 商品、受注 → 見積、受注 → 受注明細、受注明細 → 受注明細内訳、受注明細内訳 → 商品。さらに受注明細(の属性) → 受注明細内訳(本体製品受注明細内訳番号での参照)を表す線。
(図2確認)
- 図2の「見積明細」は見積番号+商品コードをもつので見積←→見積明細の線は明確です。
- 図2の「受注」(j) は該当見積番号を保持するため受注→見積の線が必要です。
- 「受注明細」には設置事業所コードがあり、受注明細 → 設置事業所 の関係(受注明細が設置箇所を持つ)も図に示します。
- 商品とセット製品構成の関係(自己参照を含む)
- 根拠:「セット製品は、一つの本体製品と一つ以上のオプション製品を組み合わせたもので、どのオプション製品で構成されるかについて、 セット製品構成に登録する。」および「設置サービスには複数種類があり、製品ごとに、どの設置サービスを適用するかを決めている。」
- 考え方:
- 商品(セット) ←→ セット製品構成 ←→ 商品(本体・オプション):構成表がセットとその構成品を結ぶ。
- 商品は設置サービスを示す商品コード(図2の設置サービス商品コード)や、セット製品であればセット製品本体を示す属性(図2のセット製品本体製品商品コード)を持つため、商品内部で自己参照がある(商品 → 商品)。
- 受注明細内訳へは、セット製品構成の情報を基に展開して登録するので、セット製品構成 → 受注明細内訳 を表す線も必要。
- 図に引く線:商品 → セット製品構成、セット製品構成 → 商品(構成品)、商品 → 商品(設置サービス参照、セットの本体参照)、セット製品構成 → 受注明細内訳(受注時の展開のため)。
最終的に図1に追加すべき線(まとめ)
- 組織 → 営業所(サブタイプ)
- 組織 → サービスセンタ(サブタイプ)
- 組織 → 顧客(組織が顧客を持つことを示す線/図の主要データフローとして)
- 営業所 → 営業担当者(所属)
- 営業担当者 → 見積(見積作成)
- 営業所 → 見積(担当組織を記録)
- 見積 → 見積明細
- 見積明細 → 商品
- 顧客 → 見積(見積は顧客のために作成)
- 顧客 → 設置事業所
- 設置事業所 → 地域
- 地域 → サービスセンタ(地域が担当SCを参照:図2の (b) = SC_組織コード)
- 受注 → 見積(受注は該当する見積番号を保持)
- 受注 → 受注明細
- 受注明細 → 受注明細内訳
- 受注明細 → 設置事業所(受注明細に設置事業所コードがある)
- 受注明細内訳 → 商品
- 商品 → セット製品構成(セットを定義)
- セット製品構成 → 商品(構成品)
- セット製品構成 → 受注明細内訳(受注時の展開結果につなぐ)
- 商品 → 商品(設置サービス商品コード、セット製品本体製品商品コードなど自己参照)
各線は上記の業務記述(引用例: 「地域ごとに、担当SCを決めている。」や 「見積りは…担当営業所の組織コード、営業担当者の社員番号…を登録する。」)と図2の属性配置(例:受注明細に設置事業所コード、受注明細内訳に展開元受注明細内訳番号等)が合致することで決まります。
誤りやすいポイント
-
地域とサービスセンタの参照方向を逆にする
- 正しくは「地域ごとに、担当SCを決めている。」=地域が担当SCを参照(図2の地域の (b) がSC_組織コード)。よって地域側にSCの参照(外部キー)が入ります。
-
顧客と営業所の関係の扱い
- 「顧客ごとに、担当営業所を決めている。担当営業所は、組織変更によって変更する場合がある。」とあるため、履歴が必要なら見積/受注に担当営業所を登録しておく(図2の見積に担当営業所の組織コードがある)。顧客表に現在の担当を持たせることは可能だが、履歴管理は見積/受注側で行うのが確実です。
-
セット製品の取り扱いをあいまいにする
- セット製品は「セット製品自体」と「展開した単体製品」を受注明細内訳に両方登録する必要がある。展開した行は展開元受注明細内訳番号でセット行に紐づける点を忘れないこと。
-
見積明細・受注明細・受注明細内訳の単位を混同する
- 見積明細は見積の明細(商品単位)、受注明細は設置単位(本体1台orセット1セット)、受注明細内訳はその受注明細の中での商品内訳(部品・サービスの明細)と役割が異なります。要件文の単位指定を正確に図に反映してください。
FAQ
Q: 顧客に「担当営業所」を持たせるべきですか?
A: 要件は「顧客ごとに、担当営業所を決めている。」ですが「担当営業所は…変更する場合がある」とあるため、現在担当を顧客表に持たせるのは可です。ただし履歴(その時点の担当)を残す必要があるので、見積・受注には必ず担当営業所の組織コードを登録する設計(図2の見積の属性)にしておくべきです。
A: 要件は「顧客ごとに、担当営業所を決めている。」ですが「担当営業所は…変更する場合がある」とあるため、現在担当を顧客表に持たせるのは可です。ただし履歴(その時点の担当)を残す必要があるので、見積・受注には必ず担当営業所の組織コードを登録する設計(図2の見積の属性)にしておくべきです。
Q: 地域とサービスセンタはどちらが外部キーを持ちますか?
A: 地域が担当SCを決める要件なので、地域側にSC_組織コード を持たせてサービスセンタを参照します(図2の地域の (b)に対応)。
A: 地域が担当SCを決める要件なので、地域側にSC_組織コード を持たせてサービスセンタを参照します(図2の地域の (b)に対応)。
Q: セット製品は受注時にどう記録しますか?
A: 受注明細は「本体1台単位」または「セット1セット単位」で作る。受注明細内訳にはセット製品自体の行と、セットを展開した各単体製品の行を登録し、展開した行は展開元受注明細内訳番号でセット行に紐づけます(要件文の「展開元受注明細内訳番号」を参照)。
A: 受注明細は「本体1台単位」または「セット1セット単位」で作る。受注明細内訳にはセット製品自体の行と、セットを展開した各単体製品の行を登録し、展開した行は展開元受注明細内訳番号でセット行に紐づけます(要件文の「展開元受注明細内訳番号」を参照)。
関連キーワード: エンティティ、リレーションシップ、主キー、外部キー、正規化
設問2:商品について、(1)、(2)に答えよ。
問題文を見る(1)商品をサブタイプに分割することにした。 図2に示した商品の属性について、サブタイプ分割後の、どのエンティティタイプに固有の属性となるかを表1にまとめた。商品名の例に倣って、太枠内に○印を付けて、表1を完成させよ。ただし、各エンティティタイプのデータ構造は、第3正規形を満たすようにすること。


模範解答

解説
解答の論理構成
-
サブタイプの整理
【問題文】には「製品」「設置サービス」、さらに「単体製品」「セット製品」、「本体製品」「オプション製品」が記載されています。つまり- 親:商品
- 子:製品 / 設置サービス
- 孫:単体製品 / セット製品(製品の下位)
- ひ孫:本体製品 / オプション製品(単体製品の下位)
の多段サブタイプ構造になります。
-
各属性を業務記述から位置付け
- 「商品名」「商品区分」は全サブタイプ共通。したがって最上位の「商品」。
- 「単体製品かセット製品かは、単体セット製品区分で分類する。」より「単体セット製品区分」は“製品”に属する。
- 「製品ごとに、どの設置サービスを適用するかを決めている。」から「設置サービス商品コード」も“製品”に属する。
- 「製品には、単体製品とセット製品がある。」→単体/セットの区別は“製品”より深い。「単体製品には、製品サイズを登録する。」ので「製品サイズ」は“単体製品”。
- 「単体製品には、本体製品(コピー機本体)とオプション製品がある。」→「製品区分」は“単体製品”。
- 「オプション製品には、給紙オプション、排紙オプションなどがあり、オプション区分で分類する。」より「オプション区分」は“オプション製品”。
- 「本体製品には、製品のシリーズを表すシリーズコードを登録する。」で「シリーズコード」は“本体製品”。
- 「セット製品は...一つの本体製品と一つ以上のオプション製品を組み合わせたもので...」および「セット製品自体で決まる設置サービスを適用」から、「セット製品本体製品商品コード」は“セット製品”。
- 「設置サービスには標準設置時間を登録する。」→「標準設置時間」は“設置サービス”。
-
第3正規形の確認
いずれのエンティティでも主キーはコード(例:商品コード)、今回付与した属性は全てその主キーに完全従属し、相互依存や推移的従属は生じないため第3正規形を満たします。
誤りやすいポイント
- 「製品区分」を“本体製品/オプション製品だから本体・オプション側”と誤って上下2か所に置く。実際は区分値が存在するのは“単体製品”エンティティ。
- 「設置サービス商品コード」を“設置サービス側の属性”と勘違いする。仕様にある通り“製品側がどのサービスを選ぶか”を持つ。
- 「単体セット製品区分」を“商品”に置いてしまう。値が付くのは「製品」だけで「設置サービス」は該当しないため共通属性ではない。
FAQ
Q: 「商品区分」は上位サブタイプである「商品」だけに置くと、下位エンティティから参照できなくなりませんか?
A: サブタイプは親テーブルの主キーを継承するので、下位エンティティの行も親テーブルに必ず存在します。したがって「商品区分」は親の「商品」で保持し、下位からは結合で参照すれば十分です。
A: サブタイプは親テーブルの主キーを継承するので、下位エンティティの行も親テーブルに必ず存在します。したがって「商品区分」は親の「商品」で保持し、下位からは結合で参照すれば十分です。
Q: 「設置サービス商品コード」がNULLになるケースは許されますか?
A: 【問題文】「製品ごとに、どの設置サービスを適用するかを決めている。」とあるので製品には必ず設置サービスが紐付きます。NULLを許すと業務仕様違反になるためNOT NULL制約を付ける設計が望ましいです。
A: 【問題文】「製品ごとに、どの設置サービスを適用するかを決めている。」とあるので製品には必ず設置サービスが紐付きます。NULLを許すと業務仕様違反になるためNOT NULL制約を付ける設計が望ましいです。
Q: 「製品サイズ」を“本体製品”に配置しても正規化上問題はありませんか?
A: 「製品サイズ」が登録されるのは“単体製品”であり、本体・オプションの両方に存在し得ます。どちらか一方に置くと、もう一方がNULL常態となり無駄な空欄が発生するため第1正規形に反します。
A: 「製品サイズ」が登録されるのは“単体製品”であり、本体・オプションの両方に存在し得ます。どちらか一方に置くと、もう一方がNULL常態となり無駄な空欄が発生するため第1正規形に反します。
関連キーワード: サブタイプ化、第3正規形、属性の従属、エンティティ継承、NULL制約
設問2:商品について、(1)、(2)に答えよ。
問題文を見る(2)図1中の商品とセット製品構成を対象に、商品をサブタイプに分割した概念データモデルを図3に示す。図3中の太枠内にエンティティタイプ名を入れ、欠落しているリレーションシップを補って図を完成させよ。
なお、リレーションシップは、スーパタイプ又はサブタイプのいずれか適切な方との間に設定すること。


模範解答

解説
解答の論理構成
-
サブタイプの抽出
- 商品の最上位分類は、【業務の概要】5.(2) にある
「商品には、製品と設置サービスがあり、 商品区分で分類する。」
です。したがってスーパタイプ「商品」の直下にサブタイプ「製品」と「設置サービス」を置きます。
- 商品の最上位分類は、【業務の概要】5.(2) にある
-
製品の再細分化
- 【業務の概要】5.(3) で
「製品には、単体製品とセット製品がある。」
と規定されているので、「製品」の下位に「単体製品」「セット製品」を配置します。
- 【業務の概要】5.(3) で
-
単体製品の再細分化
- 【業務の概要】5.(4) で
「単体製品には、本体製品(コピー機本体)とオプション製品がある。」
とあるため、「単体製品」の下に「本体製品」「オプション製品」をぶら下げます。
- 【業務の概要】5.(4) で
-
設置サービスと製品のリレーション
- 【業務の概要】5.(6) に
「設置サービスには複数種類があり、製品ごとに、どの設置サービスを適用するかを決めている。」
と明示されています。適用先は「製品」レベルなので、「設置サービス」―「製品」の間にリレーションシップ(1対多)を設定します。 - 同じ文の後段
「セット製品の場合、 セット製品自体で決まる設置サービスを適用し、 セット製品を構成する単体製品で決まる設置サービスは適用しない。」
から、リレーション先はスーパタイプ「製品」ではなくサブタイプ「セット製品」がより適切とも読めますが、単体製品にも設置サービスが必要なので、「製品」と結びます。
- 【業務の概要】5.(6) に
-
セット製品と本体製品の対応
- 【業務の概要】5.(5) で
「セット製品は、一つの本体製品と一つ以上のオプション製品を組み合わせたもの」
と示されています。ここでは
① 1セット製品に対し必ず1本体製品
② 同じ本体製品が複数のセット製品に採用されうる
という構造です。したがって「本体製品」―「セット製品」の1対多リレーションを設定します。
- 【業務の概要】5.(5) で
-
セット製品とオプション製品の多対多構造
- 同じ5.(5) 後段
「どのオプション製品で構成されるかについて、 セット製品構成に登録する。」
から、セット製品とオプション製品は多対多関係であり、その媒介エンティティが「セット製品構成」です。よって
・「セット製品」―「セット製品構成」
・「オプション製品」―「セット製品構成」
の2本のリレーションシップを配置します。
- 同じ5.(5) 後段
-
図3の空欄へのエンティティタイプ名とリレーション
上記1〜6を図へ反映すると、模範解答と同じ以下の完成図になります。商品
├── 製品
│ ├── 単体製品
│ │ ├── オプション製品 ─┐
│ │ └── 本体製品 ────┘│
│ └── セット製品 ──┬────┘
└── 設置サービス ─────┘最下部に多対多連結用の「セット製品構成」を配置し、
「オプション製品」→「セット製品構成」←「セット製品」
を結びます。
誤りやすいポイント
- 「設置サービス」を「製品」のサブタイプと誤認し、「商品」直下に置かない。
- 「本体製品」と「セット製品」を直接多対多で結んでしまい、1:1の要件を崩す。
- 「セット製品構成」をリレーションシップではなくエンティティとして実装し忘れる。
- 「オプション製品」と「本体製品」を横並びにし、サブタイプ階層を途切れさせる。
- サブタイプ間リレーションの向きを統一せず、主従逆転で解釈する。
FAQ
Q: 「設置サービス」はなぜ「商品」のサブタイプなのですか?
A: 【業務の概要】5.(2) で「商品には、製品と設置サービスがあり」と明記され、同一の「商品コード」で管理されるため同一スーパタイプに属します。
A: 【業務の概要】5.(2) で「商品には、製品と設置サービスがあり」と明記され、同一の「商品コード」で管理されるため同一スーパタイプに属します。
Q: 「セット製品構成」はリレーションシップではなく、エンティティにする理由は?
A: 【業務の概要】5.(5) に「セット製品構成に登録する」とある通り、構成を属性値としてではなく行として保持し、数量など追加属性を持つ拡張性も必要だからです。
A: 【業務の概要】5.(5) に「セット製品構成に登録する」とある通り、構成を属性値としてではなく行として保持し、数量など追加属性を持つ拡張性も必要だからです。
Q: 本体製品が1セット製品に1個と決まっているなら、別表にしなくても良いのでは?
A: 今回は製品情報を一元管理する要件があり、本体製品自体が単体販売されるケースも想定できます。よって「本体製品」は独立したサブタイプとして切り出し、「セット製品」との1対多リレーションで関係を保ちます。
A: 今回は製品情報を一元管理する要件があり、本体製品自体が単体販売されるケースも想定できます。よって「本体製品」は独立したサブタイプとして切り出し、「セット製品」との1対多リレーションで関係を保ちます。
関連キーワード: サブタイプ分割、エンティティ関連、1対多関係、多対多解消、階層構造
設問3:〔出荷指示の追加〕について、(1)、(2)に答えよ。
問題文を見る(1)〔出荷指示の追加〕 に対応するために、新たな関係を一つ追加し、既存の関係に属性を一つ追加することにした。 新たに追加する関係の主キー及び外部キーを明記した関係スキーマ、属性を追加する関係名及び追加する属性名を答えよ。
模範解答
関係スキーマ:出荷指示(出荷指示番号、出荷指示年月日)
関係名:受注明細
属性名:出荷指示番号
解説
解答の論理構成
- 出荷指示エンティティの特定
- 問題文より「出荷指示は、出荷指示番号で識別」かつ「出荷指示年月日を登録」。
⇒ 属性は 出荷指示番号、出荷指示年月日 の2つで十分。
- 問題文より「出荷指示は、出荷指示番号で識別」かつ「出荷指示年月日を登録」。
- 出荷指示と受注明細の関係
- 「受注明細をまとめて出荷指示を行う」=1つの出荷指示に複数の受注明細が対応。
⇒ 外部キーは多側である 受注明細 に置く。
- 「受注明細をまとめて出荷指示を行う」=1つの出荷指示に複数の受注明細が対応。
- 追加すべきもの
- 新関係:出荷指示(出荷指示番号、出荷指示年月日)
- 既存関係:受注明細 に 出荷指示番号 追加(外部キー、NULL可)。
誤りやすいポイント
- 出荷指示番号を 受注明細内訳 に入れてしまう
→ 内訳は単体製品やサービスレベルで明細をさらに展開した行。まとめ単位は受注明細であるため粒度が合わない。 - 出荷指示に設置事業所コードを持たせる
→ 同じ出荷指示番号でも将来複数事業所が対象になる仕様変更があり得る。正規化観点でも冗長。 - 出荷指示年月日を受注明細側へコピー
→ マスタ側(出荷指示)で一元管理すれば良く、従側へ持たせると更新異常の原因。
FAQ
Q: 出荷指示番号は受注明細の主キーに含めますか?
A: いいえ。受注明細の主キー(受注番号+受注明細番号)はそのまま保持し、出荷指示番号は外部キーとして追加します。
A: いいえ。受注明細の主キー(受注番号+受注明細番号)はそのまま保持し、出荷指示番号は外部キーとして追加します。
Q: 「同じタイミング」をどう表現しますか?
A: 出荷指示年月日がタイミングを表します。さらに詳細粒度(日時など)が必要になれば同属性を拡張するだけで対応できます。
A: 出荷指示年月日がタイミングを表します。さらに詳細粒度(日時など)が必要になれば同属性を拡張するだけで対応できます。
Q: 出荷指示の状態管理(指示済/出荷済など)は?
A: 本設問の範囲外です。必要であれば出荷指示に状態コードを追加する設計で拡張できます。
A: 本設問の範囲外です。必要であれば出荷指示に状態コードを追加する設計で拡張できます。
関連キーワード: 正規化、外部キー、多対一、主キー設計、エンティティ分割
設問3:〔出荷指示の追加〕について、(1)、(2)に答えよ。
問題文を見る(2)受注明細内訳のうち、出荷指示の対象とならない場合が二つある。 どのような場合か、それぞれ15字以内で具体的に述べよ。
模範解答
①:セット製品の場合
②:設置サービスの場合
解説
解答の論理構成
- 受注明細内訳に登録されるレコードを整理
- 本体製品・オプション製品などの「単体製品」
- セット製品そのもの
- セット製品に展開した単体製品
- 「設置サービス」
- 出荷指示対象の定義
【問題文】「出荷指示は、コピー機メーカの物流センタから出荷する製品を対象とする。」
物流センタから出荷しないものは対象外。 - 出荷可否の判定
- 単体製品 … 製品なので対象
- 展開後の単体製品 … 同上で対象
- セット製品そのもの … 物流センタから直接出荷されず、構成品を出荷するため対象外
【問題文】「セット製品を構成する単体製品に展開し…」 - 設置サービス … 物理的な出荷物がないため対象外
- よって出荷指示の対象外は
①セット製品の場合 ②設置サービスの場合
誤りやすいポイント
- 「セット製品も製品だから対象」と早合点する
- 「オプション製品」を対象外と勘違いする(オプション製品は単体製品なので対象)
- 「受注明細」と「受注明細内訳」を混同し、内訳レベルでの判断を忘れる
FAQ
Q: セット製品はなぜ直接出荷しないのですか?
A: 【問題文】に示す通り、セット製品は「一つの本体製品と一つ以上のオプション製品」を束ねた販売単位であり、実際の物流では構成された単体製品を個別に出荷するためです。
A: 【問題文】に示す通り、セット製品は「一つの本体製品と一つ以上のオプション製品」を束ねた販売単位であり、実際の物流では構成された単体製品を個別に出荷するためです。
Q: 設置サービスでも工具や部材が発送されることはないのですか?
A: システム要件として「設置サービス」はサービス提供のみを意味し、「コピー機メーカの物流センタから出荷する製品」には含まれないと規定されています。
A: システム要件として「設置サービス」はサービス提供のみを意味し、「コピー機メーカの物流センタから出荷する製品」には含まれないと規定されています。
Q: オプション製品はどのように扱われますか?
A: オプション製品は「単体製品」に分類されるため物流センタから出荷され、出荷指示の対象になります。
A: オプション製品は「単体製品」に分類されるため物流センタから出荷され、出荷指示の対象になります。
関連キーワード: 出荷指示、セット製品、設置サービス、単体製品、物流センタ





