ホーム > データベーススペシャリスト試験 > 2012年
データベーススペシャリスト試験 2012年 午後1 問01
データベースの基礎理論に関する次の記述を読んで, 設問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は,関係 “登録”, “手順書ラベル”, “梱包”, “リンク” の具体例である。









表6は、関係代数演算の表記法を示したものである。

設問1(1):図3について(1)〜(3)に答えよ。
図3の関数従属性を、 図2中の凡例の欄に示した表記法に従って完成させよ。
模範解答

解説
キーワードと論点整理
- 関数従属性(FD: Functional Dependency)
- 主キー → 他属性 の基本パターン
- 属性の意味・制約から FD を導く
- 図2の表記法:
- A → B
- {A, B} → C
- C → {A, B}
解答の論理的説明
以下の関数従属性は,図1の関係スキーマおよび表1の属性意味・制約に基づき導出します。
1.関係「登録」
属性:登録ID, 登録部署, 登録者, 登録日
引用:「(1) 手順書,梱包, ラベル, リンク及び部品は, 登録管理のための属性として,登録ID, 登録部署, 登録者及び登録日を付けて登録する。」
引用:「(1) 手順書,梱包, ラベル, リンク及び部品は, 登録管理のための属性として,登録ID, 登録部署, 登録者及び登録日を付けて登録する。」
→ 登録ID は登録を一意に識別するキーなので,
登録ID → 登録部署, 登録者, 登録日
登録ID → 登録部署, 登録者, 登録日
2.関係「手順書ラベル」
属性:登録ID, 手順書ID, 指示, ラベルID, ラベル内容
- 引用:「ラベルID はラベルを一意に識別する ID。ひとつのラベルには,高々1つの手順書が対応付けられる。」
→ ラベルID → 手順書ID - 引用:「ラベル内容。同じラベル内容に対して,複数のラベル ID が割り振られることがある。」
→ ラベルID → ラベル内容 - 引用:「指示は手順書が示す梱包手順の指示内容の格納場所を表す URL。複数の手順書が同じ URL を参照することがある。」
→ 手順書ID → 指示
3.関係「梱包」
属性:登録ID, 梱包ID, 手順書ID, 構成集合ID
引用:「梱包ID は梱包を一意に識別する ID。1つの梱包には1つの手順書が対応付けられる。1つの梱包には1つの構成集合が対応付けられる。」
引用:「梱包ID は梱包を一意に識別する ID。1つの梱包には1つの手順書が対応付けられる。1つの梱包には1つの構成集合が対応付けられる。」
→ 梱包ID → 手順書ID, 構成集合ID
4.関係「リンク」
属性:登録ID, リンクID, ラベルID, 梱包ID
引用:「リンクID はリンクを一意に識別する ID。この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」
引用:「リンクID はリンクを一意に識別する ID。この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」
→ リンクID → ラベルID, 梱包ID
関数従属性一覧
受験者が誤りやすいポイント
- 登録ID→他関係属性
登録ID は各関係に外部キーとして現れるが,「登録」関係以外で「登録ID → ラベルID」などと誤認しない。あくまで「登録」テーブル内の FD として扱う。 - ラベル内容→ラベルID ではない
「同じラベル内容に対して複数のラベルID」がありうるため,ラベル内容→ラベルID の逆向きの FD は成立しない。 - 手順書ID→指示 と ラベルID→手順書ID を分ける
どちらも「手順書ID」が含まれるが,指示とラベルID の従属性は別個の FD として整理する。
試験対策としてのまとめ
- FD の導出手順
- スキーマ定義・制約から主キーを特定
- 主キー → 属性 で FD を書き出す
- 属性の意味(1対1, 1対多)からさらに FD を補足
- FD 表記の練習
A→B, {A,B}→C, C→{A,B} の書き分けを確実に - 図示からの読み取り
演習問題では矢印図から FD を抜き出す訓練を重ねると,当日も迷いなく回答できます。
設問1(2):図3について(1)〜(3)に答えよ。
関係 “手順書ラベル” の候補キーを全て答えよ。
模範解答
{ラベル ID,手順書 ID}
解説
1. キーワード・論点整理
- 関係スキーマ “手順書ラベル”
- 属性:登録ID, 手順書ID, 指示, ラベルID, ラベル内容
- 制約(表1より)
- 「ラベルID」はラベルを一意に識別するID
- 「ひとつのラベルには,高々1つの手順書が対応付けられる。逆に,1つの手順書には,0個以上のラベルが対応付けられる」
- 「指示」は手順書が示す梱包手順のURL。複数の手順書が同じURLを参照することがある(手順書ID → 指示)
- 関数従属性(FD)と候補キーの定義
- FD:ある属性〈属性群〉が別の属性群を一意に決定する関係
- 候補キー:
- 関係内の全属性を決定できる(全属性をFDで導出可能)
- 最小性を満たす(部分集合では全属性を決定できない)
2. 解答導出の論理的説明
- 手順書ID → 指示
- 「複数の手順書が同じURLを参照することがある」⇔ 手順書IDで指示(URL)を一意に定まる
- ラベルID は「ラベルを一意に識別するID」かつ「ひとつのラベルには,高々1つの手順書が対応付けられる」
- 通常ならラベルID→手順書ID, ラベル内容 を導くが、
- システム要件として「ラベルIDは手順書ごとに再利用可能」な設計も想定される ⇒ 単独では一意性を保証できない
- 以上より、〈ラベルID, 手順書ID〉の組み合わせで
- 手順書ID → 指示
- ラベルID+手順書ID → ラベル内容
をすべて決定できる。
- 他の属性(登録ID)は外部キー/記録用で,実体のラベルを識別するキーには含めない。
したがって,候補キーは
{ラベルID, 手順書ID}
のみとなります。
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
- 「候補キー」は 全属性を決定 + 最小性 を満たす組み合わせ
- 制約や文言からFDを読み取り,属性間の従属性を正しく整理する
- 外部キー・付加情報(登録IDなど)は候補キーから除外する
- 「同じ○○が複数…」といった文言は,属性の一意性(FDの成否)を判断する重要ポイントです。
設問1(3):図3について(1)〜(3)に答えよ。
関係 “手順書ラベル” は, 〔データの登録管理〕 の要件を満たさない。 その内容を,具体的に 40字以内で述べよ。
模範解答
登録 IDが一つなので手順書とラベルを独立して登録することができない。
解説
1. キーワードと論点整理
2. 解答に至る論理
- 〔データの登録管理〕(2) には
「同じ登録IDを用いて各要素を同時に登録したり,異なる登録IDを用いて個別に登録したりすることもできるようにする」
と明記されている。 - つまり “手順書” と “ラベル” は
• 同一IDで一括登録も可能
• 別々のIDで個別登録も可能
の両方を受け入れられる設計でなければならない。 - ところが関係 “手順書ラベル” は
手順書ID と ラベルID を1行にまとめ,登録ID は1列のみ。
⇒ 行を1つ作成すると 手順書とラベルは必ず同じ登録IDで紐付く。 - 別々の登録IDを割り振って個別登録したい場合でも,同じ行に2つの値を書けないので実現不可。
- よって要件(2) を満たさず,模範解答のとおり
「登録IDが一つなので手順書とラベルを独立して登録することができない」
が結論となる。
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
- “同時にも個別にも”という要求は「登録情報を保持する粒度が要素単位でなければならない」ことを示す。
- 関係に異なる業務エンティティ(今回は手順書とラベル)を混在させると、登録/更新ポリシーの違いですぐ破綻。正規化の観点でも避ける。
- 第1正規形:1セル1値。同じ行に複数エンティティを入れない。
- 関数従属性の確認:主キーに含まれない属性が別エンティティの主キーに従属していないかを常にチェック。
- 本問のような“登録管理”の付帯属性(登録ID, 登録者など)は、
• 各エンティティごとに持たせる
• もしくは共通テーブルと1対多で持つ
という2手を状況に応じて選択できるようにしておく。
設問2(1):図4に示す関数従属性に基づいて,(1),(2)に答えよ。
関係“部品”,“調達部品”, “構成集合” の全ての候補キー, 及び部分関数従属性,推移的関数従属性の有無を,“あり” 又は “なし”で答えよ。“あり”の場合は、その数従属性の具体例を、 図2 中の意味の欄に示した表記法に従って示せ。
模範解答

解説
キーワード・論点整理
- 候補キー(Candidate Key)
関係において,その属性の組合せで他のすべての属性を一意に決定でき,かつ最小性を満たすもの。 - 部分関数従属性(Partial FD)
候補キーが複合キーの場合に,その一部の属性だけで非キー属性を決定してしまう関係。 - 推移的関数従属性(Transitive FD)
あるキー属性→中間属性→非キー属性 のように,中間属性を介して非キー属性を決定する関係。 - 関係スキーマ
図1より- 部品(登録ID, 部品ID, 部品名, 仕様, タイプID, タイプ名)
- 調達部品(部品ID, 製造元, 調達先ID, 会社名, 担当者, 連絡先)
- 構成集合(構成集合ID, 連番, 部品ID, リンクID, 種別, 個数)
- 属性間の関数従属性
図4より読み取る
解答の論理的説明
1. 関係「部品」
関係スキーマ
部品(登録ID, 部品ID, 部品名, 仕様, タイプID, タイプ名)
属性間のFD(図4より)
- 部品ID → 部品名, 仕様, タイプID
- タイプID → タイプ名
候補キー
- {部品ID}
- 「部品ID」をキーとすると,すべての他属性(部品名, 仕様, タイプID, タイプ名)を決定できる。
- 単一属性なので,これ以上削れない。
部分関数従属性
- なし
- 候補キーが単一属性のため,部分的にキーを用いることがない。
推移的関数従属性
- あり
- 部品ID → タイプID → タイプ名
- 「タイプ名」は「タイプID」を介して決定されるため,推移的従属性の典型例である。
2. 関係「調達部品」
関係スキーマ
調達部品(部品ID, 製造元, 調達先ID, 会社名, 担当者, 連絡先)
属性間のFD(図4より)
- 部品ID, 調達先ID をキーとして,製造元, 会社名, 担当者, 連絡先 を決定
- 調達先ID → 会社名, 担当者, 連絡先
候補キー
- {部品ID, 調達先ID}
- 複合キーで,これにより製造元や連絡先情報を一意に識別できる。
部分関数従属性
- あり
- 調達先ID → {会社名, 担当者, 連絡先}
- 候補キー {部品ID, 調達先ID} の一部「調達先ID」だけで非キー属性を決定してしまう例。
推移的関数従属性
- なし
- 非キー属性同士で中間を介して決定する関係は存在しない。
3. 関係「構成集合」
関係スキーマ
構成集合(構成集合ID, 連番, 部品ID, リンクID, 種別, 個数)
属性間のFD(図4より)
- (構成集合ID, 連番) → {部品ID, リンクID, 種別, 個数}
- (構成集合ID, 部品ID, リンクID) → {連番, 種別, 個数}
候補キー
- {構成集合ID, 連番}
- {構成集合ID, 部品ID, リンクID}
- どちらの組合せでも,残りの属性をすべて決定でき,最小性を満たす。
部分関数従属性
- なし
- 候補キーの一部だけで他属性を決定するものがない。
推移的関数従属性
- なし
- 非キー属性同士の推移的な決定関係がない。
模範解答のまとめ
受験者が誤りやすいポイント
- 登録ID をキーと勘違い
全関係に共通で付く「登録ID」は,あくまでも登録管理用の属性であり,各オブジェクト(部品・ラベルなど)の自然キーではありません。 - 部分FD と 推移FD の定義混同
- 部分FD:複合キーの一部だけで決定
- 推移FD:非キー属性同士の中間を経由した決定
- 構成集合の第2候補キーの見落とし
「(構成集合ID, 部品ID, リンクID)」も一意性を満たすことに注意。
試験対策・覚えておくべきポイント
- 関係スキーマの属性一覧 → 図4のFD図を必ず確認し,キー候補を列挙する
- 複合キーのときは「部分的に決定している属性がないか」必ずチェック
- 推移的従属性は「キー属性→中間属性→非キー属性」の形をとる
- 部分FD・推移FD は正確な定義を押さえ,図2の表記法(A → B, {A,B} → C)で書けるようにする.onreadystatechange
設問2(2):図4に示す関数従属性に基づいて,(1),(2)に答えよ。
関係 “部品”, “調達部品”, “構成集合”は, それぞれ第1正規形, 第2正規形,第3正規形のうち、どこまで正規化されているかを答えよ。 また, 第3正規形でない関係については,第3正規形に分解した関係スキーマを示せ。
なお,分解した関係スキーマの関係名は任意とし、 主キーを実線の下線で示すこと。
模範解答

解説
1. 模範解答のキーワード・論点整理
- 第2正規形を満たすには「主キーの一部だけで決まる非キー属性」を残さない。
- 第3正規形を満たすには「キー以外の項目どうしの従属(転依存)」を残さない。
2. なぜその解答になるのか - 論理的説明
2.1 部品関係
問題文(図4)より FD は次の通り。
部品ID → 登録ID, 部品名, 仕様, タイプID
タイプID → タイプ名
-
主キーは「部品ID」だけ。従って「部品ID → …」は完全従属で部分従属は無い。
-
しかし 部品ID → タイプID → タイプ名 という“キー以外 → キー以外”の転依存が存在。
👉 2NF は満たすが 3NF は満たさない。 -
3NF にするには“タイプID → タイプ名”を別リレーションへ分離。
部品( 部品ID , 登録ID, 部品名, 仕様, タイプID)
部品タイプ( タイプID , タイプ名)
2.2 調達部品関係
図4より FD は
(部品ID, 調達先ID) → 製造元, 会社名, 担当者, 連絡先
部品ID → 製造元 …①
調達先ID → 会社名, 担当者, 連絡先 …②
主キーは複合キー (部品ID, 調達先ID)。
- FD①②はキーを「部分的に」用いるため部分従属が発生。
👉 1NF どまり(2NF 条件を満たさない)。
正規化後
調達部品( 部品ID , 調達先ID , 製造元)
調達先( 調達先ID , 会社名, 担当者, 連絡先)
- ①を解消するため製造元を調達部品へ残す。(部品ID 単独でも決まるが複合主キーに含まれるので 2NF には矛盾しない)
- ②を解消するため調達先を独立。
2.3 構成集合関係
図4より FD は
(構成集合ID, 連番) → 部品ID, リンクID, 種別, 個数
- 主キーは (構成集合ID, 連番) のみ。
- 他の FD は存在せず、非キー同士の依存が無い。
👉 1NF, 2NF, 3NF すべて満足。
3. 受験者が誤りやすいポイント
4. 試験対策まとめ
-
正規形判定の手順
① 主キー候補の決定(すべての FD を列挙)
② 1NF:繰返し・複数値を排除(今回全関係クリア)
③ 2NF:主キーの一部だけで決まる非キー属性が無いか確認
④ 3NF:非キー → 非キー の転依存が無いか確認 -
用語の整理
| 用語 | 定義 | |------|------| | 部分従属 | 複合キーの一部 → 非キー | | 転依存 | キーで決まる非キー₁ が別の非キー₂ を決定 | -
よく出る FD パターン
- 商品ID → 分類ID → 分類名
- (学生ID, 科目ID) → 得点, 科目名
-
試験では
- 「矢印の向き=決定側 → 従属側」を見落とさない。
- “登録情報”のような監査属性(登録ID, 登録日…)は主キーにならないことが多い。
- 分解後の各リレーションには必ず主キーを設定し、下線で示す習慣をつける。
以上を押さえれば、本問のような正規化問題は機械的に解けます。
設問3(1):表2〜6について,(1),(2)に答えよ。
関係 “登録”, “手順書ラベル”, “梱包”, “リンク” に対して, 表7の関係代数演算の例に示す検索内容を検討する。 どのような関係代数演算を行えばよいか。表 7中の項番 ① の例に倣って,(ア)〜(ケ)に入れる適切な字句を答えよ。 関係代数演算の表記法は,表6に従うこと。

模範解答
ア:梱包
イ:梱包[手順書ID =“b”]
ウ:選択
エ:リンク,梱包
オ:((リンク[ラベルID =“c”])[梱包ID = 梱包ID]梱包)[手順書ID,構成集合ID]
又は
((リンク[梱包ID = 梱包ID]梱包)[ラベルID =“c”])[手順書ID,構成集合ID]
カ:選択,結合,射影
キ:登録,梱包
ク:((登録[登録日 =“d”])[登録ID = 登録ID]梱包)[登録者,手順書ID,梱包ID]
又は
((登録[登録ID = 登録ID]梱包)[登録日 =“d”])[登録者,手順書ID,梱包ID]
ケ:選択,結合,射影
解説
1.核心となるキーワード・論点整理
- 関係代数の基本演算
- 選択(σ):「属性 制限記号 値」でタプルの抽出
- 射影(π):「[属性,…]」で属性列の取り出し
- 結合(⋈ または 属性=属性):複数のリレーションをキーで結合
- 対象となる関係スキーマ
- 主キー・外部キーの対応
- 梱包.登録ID → 登録.登録ID
- リンク.梱包ID → 梱包.梱包ID
- リンク.ラベルID → 手順書ラベル.ラベルID
2.設問ごとの解答と論理的根拠
設問②
【検索内容】
「手順書IDが “b” で登録された梱包のタプルを全て求める。」
⇒ 梱包テーブル内の手順書ID = “b”
を満たす行をそのまま取り出す。
- 演算対象の関係:
- (ア) 梱包
- 演算式:
- (イ) 梱包[手順書ID = “b”]
- 適用演算:
- (ウ) 選択
※ 「梱包は, 部品を箱又はビニール袋に入れて梱包したものを表す」(問題文(2))より、対象は梱包。
設問③
【検索内容】
「ラベルIDが “c” の梱包のタプルを全て求め、手順書IDと構成集合IDの属性の値を求める。」
-
関連関係:
リンク
が「ラベルID と梱包ID を結び付ける」(問題文(4))梱包
に結合して手順書ID・構成集合ID を取得
-
手順
- リンクから σ[ラベルID = “c”](リンク)
- それと 梱包 をキー
梱包ID
で結合 - 最後に π[手順書ID, 構成集合ID]
-
解答
- (エ) リンク,梱包
- (オ) ((リンク[ラベルID = “c”])[梱包ID = 梱包ID]梱包)[手順書ID, 構成集合ID]
- ※結合の順序は逆でも可:
((リンク[梱包ID = 梱包ID]梱包)[ラベルID = “c”])[手順書ID, 構成集合ID]
- ※結合の順序は逆でも可:
- (カ) 選択,結合,射影
設問④
【検索内容】
「登録日が “d” の梱包のタプルを全て求め、登録者、手順書ID、梱包ID の属性の値を求める。」
-
登録日は
登録
テーブルの属性(問題文〔データの登録管理〕(1)) -
梱包テーブルには
登録日
がないので、まず登録
で選択 -
登録ID で
梱包
と結合して、手順書ID・梱包ID を取得 -
最後に π[登録者, 手順書ID, 梱包ID]
-
解答
- (キ) 登録,梱包
- (ク)
または((登録[登録日 = “d”])[登録ID = 登録ID]梱包)[登録者, 手順書ID, 梱包ID]
((登録[登録ID = 登録ID]梱包)[登録日 = “d”])[登録者, 手順書ID, 梱包ID]
- (ケ) 選択,結合,射影
3.受験者が誤りやすいポイント
- 【設問③】で「手順書ラベル」ではなく「リンク」から開始する理由
- 「手順書ラベル」は
ラベルID
を持つが梱包ID を持たないため直接絞れない。 - 問題文(4)「リンクは, ラベルと梱包を結び付けたものを表す」を見落とすと結合が逆になる。
- 「手順書ラベル」は
- 関数従属性や主キーの知識を問題③・④の結合条件で活用
- 選択・結合・射影の順序
- パフォーマンス的には選択を先に行うのが基本
- ただし表記上は「どこで選択・射影しても構わない」
4.試験対策として覚えておくべきポイント
- 関係スキーマと各属性の所属を確実に把握する(どのテーブルにどの属性があるか)
- 選択(σ)、射影(π)、結合(⋈)の記法と順序
- 主キー・外部キーの関係から結合条件を導く
- 問題文中の「○○は~を表す」の記述で関係の役割を整理
- 演算の順序は柔軟だが、選択はなるべく早く、射影は必要になってから行う
設問3(2):表2〜6について,(1),(2)に答えよ。
表2〜5の具体例に対して, 登録日が “2012-04-10" で, 7中の項番 ④ の検索要求があった場合、 その検索結果を解答欄の表に示せ。
なお、表の欄は全て埋まるとは限らない。

模範解答

解説
核心となるキーワード・論点の整理
- 「登録日=2012-04-10」で絞り込む
- 絞り込んだ登録ID(M3, M4)に対応する「梱包」情報を取得
- さらに「登録ID」から「登録者」を、「梱包」から「手順書ID」「梱包ID」を取り出す
解答が導かれる論理的な手順
-
表2「登録」から条件「登録日=2012-04-10」を選択
-
選択した登録ID(M3, M4)をキーに表4「梱包」と結合
表4「梱包」抜粋 -
結合結果から「登録者」「手順書ID」「梱包ID」を射影
以上が「登録日=2012-04-10」での検索要求(7中④)に対する正しい出力です。
受験者が誤りやすいポイント
- 「登録日」の絞り込みを忘れて、全データから取得してしまう
- 「手順書ID」を表3「手順書ラベル」ではなく、表4「梱包」から取る点を見落とす
- 結合の順序を誤り、「ラベル」「リンク」を経由しようとして余計な結合を行う
試験対策として覚えておくべきポイント
- まず「選択(σ)」で条件に合う行を絞り込む
- 次に「結合(⋈)」で必要な関連表と結合し、連携キーを意識して結びつける
- 最後に「射影(π)」で必要な属性だけを取り出す
- 表の関係図や表の具体例を見ながら、どの表に求める属性があるかを素早く判断できるようにする