DBデータベーススペシャリスト試験 午後Ⅰ

平成24年度春期 データベーススペシャリスト 午後Ⅰ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの基礎理論に関する次の記述を読んで,設問1~3に答えよ。 H社は,タンス,本棚など様々なタイプの組立て家具を開発・製造し,販売している。各商品は,組立てに必要な部材,金具などの部品を箱又はビニール袋に入れて梱包し,販売店に出荷している。 流通コストを下げるため,商品運送時の形状が小さくなるように工夫した手順書に従って梱包が行われている。 H社では,部品管理及び梱包作業を支援するシステムの開発を予定している。そのために,まず,システムで使用するための,部品及び梱包手順の情報に関するデータモデルについて,検討することになった。 〔データモデルの検討〕 検討したデータモデルの主な要素は,次のとおりである。 (1) 手順書は,組立て家具の梱包手順が記載されたドキュメントを表す。 (2) 梱包は,部品を箱又はビニール袋に入れて梱包したものを表す。 (3) ラベルは,適用する手順書,梱包の内容物,出荷先などの情報を表す。 (4) リンクは,ラベルと梱包を結び付けたものを表す。 (5) 部品は,組立て家具に使われる板材,ノブ,木ねじなどの構成要素を表す。 (6) 調達部品は,部品のうち社外から調達するものを表す。 (7) 構成集合は,部品又はリンクを要素とする集合を表す。 〔データの登録管理〕 データの登録管理に関する要件は,次のとおりである。 (1) 手順書,梱包,ラベル,リンク及び部品は,登録管理のための属性として,登録ID,登録部署,登録者及び登録日を付けて登録する。 (2) 同じ登録IDを用いて各要素を同時に登録したり,異なる登録IDを用いて個別に登録したりすることもできるようにする。 (3) 調達部品は,調達先の情報も管理する。 データモデルの関係スキーマとその属性,属性間の関数従属性を検討した。その結果を図1,3,4及び表1に示す。 図1は,検討したデータモデルを関係スキーマで表現したものである。 図3,4は,図2の関数従属性の表記法に従って,属性間の関数従属性を表したものである。 表1は,図1の関係スキーマの属性とその意味・制約を示したものである。 表2~5は,関係“登録”,“手順書ラベル”,“梱包”,“リンク”の具体例である。 図1 検討したデータモデルの関係スキーマ 表1 関係スキーマの属性とその意味・制約 図2 関数従属性の表記法 図3 関係“登録”,“手順書ラベル”,“梱包”,“リンク”の属性間の関数従属性(未完成) 図4 関係“部品”,“調達部品”,“構成集合”の属性間の関数従属性 表2 関係“登録”の具体例 表3 関係“手順書ラベル”の具体例 表4 関係“梱包”の具体例 表5 関係“リンク”の具体例 表6は,関係代数演算の表記法を示したものである。 表6 関係代数演算の表記法 設問1 図3について,(1)~(3)に答えよ。 (1) 図3の関数従属性を,図2中の凡例の欄に示した表記法に従って完成させよ。 (2) 関係“手順書ラベル”の候補キーを全て答えよ。 (3) 関係“手順書ラベル”は,〔データの登録管理〕の要件を満たさない。その内容を,具体的に40字以内で述べよ。 設問2 図4に示す関数従属性に基づいて,(1),(2)に答えよ。 (1) 関係“部品”,“調達部品”,“構成集合”の全ての候補キー,及び部分関数従属性,推移的関数従属性の有無を,“あり”又は“なし”で答えよ。“あり”の場合は,その関数従属性の具体例を,図2中の意味の欄に示した表記法に従って示せ。 (2) 関係“部品”,“調達部品”,“構成集合”は,それぞれ第1正規形,第2正規形,第3正規形のうち,どこまで正規化されているかを答えよ。また,第3正規形でない関係については,第3正規形に分解した関係スキーマを示せ。 なお,分解した関係スキーマの関係名は任意とし,主キーを実線の下線で示すこと。 設問3 表2~6について,(1),(2)に答えよ。 (1) 関係“登録”,“手順書ラベル”,“梱包”,“リンク”に対して,表7の関係代数演算の例に示す検索内容を検討する。どのような関係代数演算を行えばよいか。表7中の項番①の例に倣って,【ア】~【ケ】に入れる適切な字句を答えよ。関係代数演算の表記法は,表6に従うこと。 表7 関係代数演算の例 (2) 表2~5の具体例に対して,登録日が“2012-04-10”で,表7中の項番④の検索要求があった場合,その検索結果を解答欄の表に示せ。 なお,表の欄は全て埋まるとは限らない。
図1 検討したデータモデルの関係スキーマ。枠内に7つの関係スキーマを列挙した図。登録,手順書ラベル,梱包,リンク,部品,調達部品,構成集合の各関係と,登録ID・手順書ID・ラベルID・梱包ID・部品ID・調達先ID・構成集合ID・連番等の属性を示す。
図1 検討したデータモデルの関係スキーマ。枠内に7つの関係スキーマを列挙した図。登録,手順書ラベル,梱包,リンク,部品,調達部品,構成集合の各関係と,登録ID・手順書ID・ラベルID・梱包ID・部品ID・調達先ID・構成集合ID・連番等の属性を示す。
表1 関係スキーマの属性とその意味・制約。登録IDから個数までの各属性名と意味・制約の表。ラベルには高々一つの手順書が対応すること,同じラベル内容に複数のラベルIDが割り振られ得ること,一つの部品を複数の調達先から調達し得ること,連番は構成集合内で一意であることなどを記す。
表1 関係スキーマの属性とその意味・制約。登録IDから個数までの各属性名と意味・制約の表。ラベルには高々一つの手順書が対応すること,同じラベル内容に複数のラベルIDが割り振られ得ること,一つの部品を複数の調達先から調達し得ること,連番は構成集合内で一意であることなどを記す。
図2 関数従属性の表記法。関数従属性の凡例と意味を示す図。矢印A→Bはそのまま A→B,A・Bを囲む枠からCへの矢印は{A,B}→C,CからA・Bを囲む枠への矢印はC→{A,B},すなわちC→AとC→Bを表す。
図2 関数従属性の表記法。関数従属性の凡例と意味を示す図。矢印A→Bはそのまま A→B,A・Bを囲む枠からCへの矢印は{A,B}→C,CからA・Bを囲む枠への矢印はC→{A,B},すなわちC→AとC→Bを表す。
図3 関係“登録”,“手順書ラベル”,“梱包”,“リンク”の属性間の関数従属性(未完成)。未完成の関数従属性図。ラベルID,手順書ID,登録ID,梱包ID,リンクID,構成集合IDの箱が配置され,ラベルIDと手順書IDからは空欄の箱へ矢印が出ている。左には三つの空欄を囲む枠がある。点線枠内に4関係のスキーマを示す。
図3 関係“登録”,“手順書ラベル”,“梱包”,“リンク”の属性間の関数従属性(未完成)。未完成の関数従属性図。ラベルID,手順書ID,登録ID,梱包ID,リンクID,構成集合IDの箱が配置され,ラベルIDと手順書IDからは空欄の箱へ矢印が出ている。左には三つの空欄を囲む枠がある。点線枠内に4関係のスキーマを示す。
図4 関係“部品”,“調達部品”,“構成集合”の属性間の関数従属性。関数従属性図。{構成集合ID,連番}→種別・個数・リンクID・部品ID,部品ID→登録ID・部品名・仕様・タイプID,タイプID→タイプ名,{部品ID,調達先ID}→製造元,調達先ID→会社名・担当者・連絡先。下の点線枠に3関係のスキーマを示す。
図4 関係“部品”,“調達部品”,“構成集合”の属性間の関数従属性。関数従属性図。{構成集合ID,連番}→種別・個数・リンクID・部品ID,部品ID→登録ID・部品名・仕様・タイプID,タイプID→タイプ名,{部品ID,調達先ID}→製造元,調達先ID→会社名・担当者・連絡先。下の点線枠に3関係のスキーマを示す。
表2 関係“登録”の具体例。登録ID,登録部署,登録者,登録日の表。M1 設計G1 田中 2012-04-01,M2 設計G2 鈴木 2012-04-01,M3 設計G3 山田 2012-04-10,M4 製造 木村 2012-04-10,M5 製造 佐藤 2012-04-15。
表2 関係“登録”の具体例。登録ID,登録部署,登録者,登録日の表。M1 設計G1 田中 2012-04-01,M2 設計G2 鈴木 2012-04-01,M3 設計G3 山田 2012-04-10,M4 製造 木村 2012-04-10,M5 製造 佐藤 2012-04-15。
表3 関係“手順書ラベル”の具体例。登録ID,手順書ID,指示,ラベルID,ラベル内容の表。M1 型ABC L1 タンス部材(国内向け),M2 型A-1 L2 ノブ(北米向け),M1 型B-2 L3 引き出し部材(国内向け),M3 型C-3 L4 ネジ・くぎ(欧州向け)。指示は全てhttp://…/…。
表3 関係“手順書ラベル”の具体例。登録ID,手順書ID,指示,ラベルID,ラベル内容の表。M1 型ABC L1 タンス部材(国内向け),M2 型A-1 L2 ノブ(北米向け),M1 型B-2 L3 引き出し部材(国内向け),M3 型C-3 L4 ネジ・くぎ(欧州向け)。指示は全てhttp://…/…。
表4 関係“梱包”の具体例。登録ID,梱包ID,手順書ID,構成集合IDの表。M1 P1 型ABC S1,M3 P2 型A-1 S2,M3 P3 型A-1 S3,M4 P4 型B-2 S4,M4 P5 型C-3 S5。
表4 関係“梱包”の具体例。登録ID,梱包ID,手順書ID,構成集合IDの表。M1 P1 型ABC S1,M3 P2 型A-1 S2,M3 P3 型A-1 S3,M4 P4 型B-2 S4,M4 P5 型C-3 S5。
表5 関係“リンク”の具体例。登録ID,リンクID,ラベルID,梱包IDの表。全て登録IDはM5で,K1 L1 P1,K2 L2 P2,K3 L2 P3,K4 L3 P4,K5 L4 P5。
表5 関係“リンク”の具体例。登録ID,リンクID,ラベルID,梱包IDの表。全て登録IDはM5で,K1 L1 P1,K2 L2 P2,K3 L2 P3,K4 L3 P4,K5 L4 P5。
表6 関係代数演算の表記法。射影R[属性,属性,…],選択R[属性 制限記号 属性],結合R[属性 制限記号 属性]S,商R÷Sの表記と備考の表。制限記号は<,=,>。注記に入れ子演算では中間の関係を括弧でくくる形式例を示す。
表6 関係代数演算の表記法。射影R[属性,属性,…],選択R[属性 制限記号 属性],結合R[属性 制限記号 属性]S,商R÷Sの表記と備考の表。制限記号は<,=,>。注記に入れ子演算では中間の関係を括弧でくくる形式例を示す。
表7 関係代数演算の例。項番,検索内容,演算対象となる関係,演算式,適用する演算の表。項番①は登録を選択・射影する例。項番②~④は空欄ア~ケで,手順書ID“b”の梱包,ラベルID“c”の梱包,登録日“d”の梱包の検索を問う。注記付き。
表7 関係代数演算の例。項番,検索内容,演算対象となる関係,演算式,適用する演算の表。項番①は登録を選択・射影する例。項番②~④は空欄ア~ケで,手順書ID“b”の梱包,ラベルID“c”の梱包,登録日“d”の梱包の検索を問う。注記付き。
解答欄の表(キャプションなし)。設問3(2)の解答欄として掲載された空の表。列は登録者,手順書ID,梱包IDの3列で,記入行は5行ある。公式キャプションはない。
解答欄の表(キャプションなし)。設問3(2)の解答欄として掲載された空の表。列は登録者,手順書ID,梱包IDの3列で,記入行は5行ある。公式キャプションはない。
解き方のヒントを見る

属性間の決定関係を丁寧に確かめる

この分野では、どの属性の値が決まると別の属性の値が一つに定まるのかという関係を、与えられた情報から一つずつ確かめることが出発点になります。思い込みで関係を補わず、根拠のある関係だけを手元に書き出して整理しましょう。

この問題で問われていること

検討の観点は一つ、属性どうしの決定関係を正確に把握することです。何が何を決めるのかを読み取った根拠と一緒に書き出し、その整理結果を土台にしてキーや構造、検索の意味を考える姿勢で取り組むと、判断のぶれを抑えられます。

視点

関係データベースの学習では、個々の用語を暗記するよりも、属性の間にどのような決定関係があるかを最初に明らかにすることが重要です。この整理が曖昧なままだと、後に続く判断もすべて不確かになります。一般常識や名称の印象から関係を補うのではなく、画面に示された記述や条件の範囲で言えることだけを取り出し、自分の言葉で書き出してから次の判断に進むようにしましょう。

確認ポイント

  • 示された記述のどこを根拠に、どの属性がどの属性の値を決めると読み取ったかを説明できるか
  • 根拠のない関係を常識や名称の印象から補っていないか
  • 書き出した決定関係の一覧を、その後の判断すべての共通の土台として使っているか
正解と解説を見る

解説

組立て家具の部品と梱包手順を管理するデータモデルを題材に、関数従属性図の完成、候補キーの特定、登録管理要件に合わない点の指摘、部分関数従属性・推移的関数従属性の判定と第3正規形への分解、関係代数(選択・結合・射影)による検索式の作成と結果の導出までを通して問う基礎理論の問題です。採点講評では、全体の正答率は高いものの、手順書ラベルの複合候補キー、構成集合の候補キー、関係代数の演算式(オ・ク)で誤りが目立ったとされています。

問題の全体像

H社は組立て家具の部品を箱やビニール袋に梱包して出荷しています。部品管理と梱包作業を支援するシステムのため、手順書・梱包・ラベル・リンク・部品・調達部品・構成集合をデータモデル化し、図1の関係スキーマ、図3・図4の関数従属性、表1の意味・制約、表2~5の具体例が示されています。〔データの登録管理〕では、各要素に登録ID・登録部署・登録者・登録日を付けること、同じ登録IDでまとめて登録することも、異なる登録IDで個別に登録することもできるようにすることが求められています。公式解答例の出題趣旨では、①正規化の基礎的な理解、②関数従属性の図から関係スキーマを作ること、③関係代数の考え方を問い、関数従属性や正規化理論でデータモデルを分析する能力と関係代数を適用する能力を評価するとされています。

設問1(1)

表1の意味・制約を一つずつ関数従属性に置き換えます。図3の太枠の空欄は、ラベルIDの上にある枠が「ラベル内容」、手順書IDの上にある枠が「指示」、三つ並んだ枠が「登録部署・登録者・登録日」です。公式解答例の矢印は次のとおりです。①登録ID→{登録部署、 登録者、 登録日}。②ラベルID→ラベル内容、ラベルID→手順書ID(一つのラベルに手順書は高々一つ)、ラベルID→登録ID。③手順書ID→指示、手順書ID→登録ID。④梱包ID→手順書ID(一つの梱包に手順書は一つ)、梱包ID→構成集合ID、梱包ID→登録ID。⑤リンクID→ラベルID、リンクID→梱包ID(一つのリンクにラベルと梱包が一つずつ)、リンクID→登録ID。逆向きの矢印は引きません。ラベル内容は複数のラベルIDに割り振られることがあり、指示は複数の手順書が同じURLを参照することがあり、手順書には0個以上の梱包・ラベルが対応するからです。

設問1(2)

公式解答例では、候補キーは{ラベルID、 手順書ID}です。表1によると、一つの手順書には0個以上のラベルが対応するため、手順書IDだけではタプルを一意に識別できません。また、ラベルが付いていない手順書のタプルも存在し得るため、ラベルIDだけでもこの関係のタプルを識別し切れません。そのため、二つの属性の組が候補キーになります。採点講評では、二つの属性の組が候補キーであることに気付いていない誤答が多かったとされ、状況記述からタプルを一意に識別できる属性の組を判別するよう求めています。

設問1(3)

着目点は、設問1(1)で得た手順書ID→登録IDとラベルID→登録IDの両方が、関係“手順書ラベル”の中の一つの登録ID属性を決めている点です。一つのタプルに登録IDが一つしかないので、手順書とラベルは必ず同じ登録IDで登録されます。これは〔データの登録管理〕(2)の「異なる登録IDを用いて個別に登録することもできるようにする」という要件を満たしません。公式解答例では「登録IDが一つなので手順書とラベルを独立して登録することができない」という趣旨です。40字以内の答案では、「登録IDが一つしかない」ことと「手順書とラベルを別々(独立)に登録できない」ことの2点を押さえます。

設問2(1)

図4の矢印を関係ごとに確認します。【部品】候補キーは{部品ID}です。キーが単一属性なので部分関数従属性はありません。部品ID→タイプID→タイプ名という推移的関数従属性があります。【調達部品】表1に「一つの部品を複数の調達先から調達することがある」とあるため、候補キーは{部品ID、 調達先ID}です(製造元はこの組に従属します)。キーの一部である調達先IDに{会社名、 担当者、 連絡先}が従属するので、部分関数従属性があります。非キー属性を経由する推移的関数従属性はありません。【構成集合】図4では、{構成集合ID、 部品ID、 リンクID}→連番・種別・個数、{構成集合ID、 連番}→部品ID・リンクID・種別・個数となっています。このため公式解答例では、候補キーは{構成集合ID、 部品ID、 リンクID}と{構成集合ID、 連番}の二つです。非キー属性の種別・個数はどちらの候補キー全体にも従属しているので、部分関数従属性も推移的関数従属性もありません。採点講評では、構成集合の候補キーの記述を誤った解答が散見されたとされています。

設問2(2)

設問2(1)の判定をそのまま使います。【部品】部分関数従属性はなく、推移的関数従属性があるので第2正規形です。推移の原因であるタイプID→タイプ名を切り出します。公式解答例では、部品(部品ID〔主キー〕、 登録ID、 部品名、 仕様、 タイプID)と部品タイプ(タイプID〔主キー〕、 タイプ名)に分解しています。【調達部品】部分関数従属性があるので第1正規形です。公式解答例では、調達部品(部品ID〔主キー〕、 調達先ID〔主キー〕、 製造元)と調達先(調達先ID〔主キー〕、 会社名、 担当者、 連絡先)に分解しています。【構成集合】部分関数従属性も推移的関数従属性もないので第3正規形であり、分解は不要です。答案では、主キーに実線の下線を引くことを忘れないようにします。

設問3(1)(ア)

項番②の検索条件である手順書IDと、求める「梱包のタプル」は、どちらも関係“梱包”にそろっています。他の関係との結合は不要なので、公式解答例では演算対象となる関係は「梱包」です。

設問3(1)(イ)

表6の選択の式「R[属性 制限記号 属性]」に当てはめます。属性の一方は値でもよいので、公式解答例では「梱包[手順書ID =“b”]」です。梱包のタプルを全て求めるので、属性を絞り込む射影は付けません。

設問3(1)(ウ)

条件に合うタプルを取り出すだけで、属性の絞り込みも他の関係との結合も行わないため、公式解答例では適用する演算は「選択」のみです。項番①が選択と射影を使っているのと比べると、射影がない点が違います。

設問3(1)(エ)

条件のラベルIDは関係“リンク”にあり、求める手順書IDと構成集合IDは関係“梱包”にあります。リンクはラベルと梱包を結び付けるもので、梱包IDを持っています。そのため、公式解答例では演算対象は「リンク,梱包」の二つです。

設問3(1)(オ)

リンクからラベルIDが“c”のタプルを選択し、梱包IDの一致で梱包と結合し、手順書IDと構成集合IDに射影します。公式解答例では「((リンク[ラベルID =“c”])[梱包ID = 梱包ID]梱包)[手順書ID、 構成集合ID]」です。先に結合してから選択する「((リンク[梱包ID = 梱包ID]梱包)[ラベルID =“c”])[手順書ID、 構成集合ID]」も併記されています。表6の注記に従い、中間の関係を括弧でくくって入れ子にすることが必要です。採点講評では、オの正答率が低く、与えられた形式で的確に表現できていない誤答が散見されたと指摘されています。

設問3(1)(カ)

オの式では、ラベルIDによる絞り込み(選択)、リンクと梱包を梱包IDでつなぐ操作(結合)、手順書IDと構成集合IDだけを取り出す操作(射影)を使っています。そのため、公式解答例では「選択,結合,射影」です。

設問3(1)(キ)

条件の登録日と、求める登録者は関係“登録”にあります。手順書IDと梱包IDは関係“梱包”にあります。両者は登録IDで結び付くので、公式解答例では演算対象は「登録,梱包」です。

設問3(1)(ク)

登録から登録日が“d”のタプルを選択し、登録IDの一致で梱包と結合し、登録者・手順書ID・梱包IDに射影します。公式解答例では「((登録[登録日 =“d”])[登録ID = 登録ID]梱包)[登録者、 手順書ID、 梱包ID]」です。結合してから選択する「((登録[登録ID = 登録ID]梱包)[登録日 =“d”])[登録者、 手順書ID、 梱包ID]」も併記されています。採点講評では、クもオと同様に正答率が低かったとされています。括弧の位置、結合条件、射影する属性の三つをそろえて書くことが大切です。

設問3(1)(ケ)

クの式は、登録日による選択、登録IDによる結合、三つの属性への射影で構成されています。そのため、公式解答例では「選択,結合,射影」です。

設問3(2)

表2で登録日が2012-04-10の登録は、M3(登録者:山田)とM4(登録者:木村)です。表4で登録IDがM3の梱包はP2(型A-1)とP3(型A-1)、M4の梱包はP4(型B-2)とP5(型C-3)です。これらを結合して登録者・手順書ID・梱包IDに射影すると、公式解答例のとおり(山田、 型A-1、 P2)(山田、 型A-1、 P3)(木村、 型B-2、 P4)(木村、 型C-3、 P5)の4行になり、解答欄の5行目は空欄のままです。手順書ラベルやリンクの登録ID(M1・M2・M5など)は、この検索の対象外である点に注意します。

学習のポイント

表1の意味・制約から関数従属性を正確に読み取り、候補キー(複合キーや複数の候補キーを含む)を漏れなく挙げること、部分関数従属性と推移的関数従属性の区別、関係代数の決められた表記法で選択・結合・射影を入れ子にして書く練習が重点です。

出典:独立行政法人 情報処理推進機構(IPA)平成24年度春期 データベーススペシャリスト試験 午後Ⅰ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針