データベーススペシャリスト 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は、関係代数演算の表記法を示したものである。
模範解答

解説
解答の導き方
図3の関数従属性を完成するには、図1の関係スキーマと表1の属性意味・制約、さらに表3・表4などの具体例から「どの属性が他の属性を一意に決めるか」を順に判断します。以下、各ブロックごとに問題文の該当記述を引用しながら導きます。
-
登録情報(登録ID → 登録部署, 登録者, 登録日)
- 表1に「登録ID登録を一意に識別するID」とあるため、登録IDが登録属性群を一意に決定します。具体例の表2でも各登録ID(M1〜M5)は登録部署・登録者・登録日を一意に持っており、
登録ID → 登録部署, 登録者, 登録日 が導けます。
- 表1に「登録ID登録を一意に識別するID」とあるため、登録IDが登録属性群を一意に決定します。具体例の表2でも各登録ID(M1〜M5)は登録部署・登録者・登録日を一意に持っており、
-
手順書とラベル側(ラベルID → ラベル内容, 手順書ID, 登録IDおよび 手順書ID → 指示)
- 表1に「ラベルIDラベルを一意に識別するID。ひとつのラベルには、高々1つの手順書が対応付けられる。」とあります。これより ラベルID → 手順書IDが成り立ちます。また「ラベル内容」がラベル固有の内容なので ラベルID → ラベル内容 も成り立ちます。
- 「手順書が示す梱包手順の指示内容の格納場所を表すURL(指示)。複数の手順書が同じURLを参照することがある。」とあるので、手順書IDが指示を決めます。すなわち 手順書ID → 指示 です。従って推移律により ラベルID → 指示 も成り立ちます。
- 手順書も、ラベルや梱包と同じく登録IDを付けて登録されます(〔データの登録管理〕(1))。手順書ごとに登録IDが一つ決まるので、手順書ID → 登録ID も成り立ちます。
- 表3の具体例を見ると、登録IDが同じでも複数のラベルID(表3では登録ID 「M1」に対して ラベルID 「L1」「L3」)が存在するため、登録ID → ラベルIDは成立しません。一方で各ラベルIDは1つの登録IDを持つので、ラベルID → 登録IDと判断します。
-
梱包側(梱包ID → 手順書ID, 構成集合ID, 登録ID)
- 表1に「梱包ID梱包を一意に識別するID。1つの梱包には1つの手順書が対応付けられる。」とあるので、梱包IDがその梱包の手順書IDと構成集合ID(および登録ID)を決定します。つまり 梱包ID → 手順書ID, 構成集合ID, 登録IDです。
- 表4の具体例では同一登録ID(表4の「M3」)に対して複数の梱包ID(「P2」「P3」)があるため、登録ID → 梱包IDは成立しないことが確認できます。
-
リンク側(リンクID → ラベルID, 梱包ID, 登録ID)と手順書一致制約
- 表1に「リンクIDリンクを一意に識別するID。・・・この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」とあるため、リンクIDは対応するラベルIDと梱包ID(およびその登録ID)を決定します。よって リンクID → ラベルID, 梱包ID, 登録IDです。
- さらに表1の制約「ラベルが示す手順書IDと梱包で指定される手順書IDは同一でなければならない。」により、ラベルIDと梱包IDのそれぞれが指す 手順書IDは一致する必要があります。したがって図3上では ラベルID → 手順書IDと 梱包ID → 手順書IDの両方を示し、リンクにより両者が同じ手順書IDで結び付けられることを表します。
以上を整理すると、図3に描くべき関数従属性は次のとおりです(図2の表記法に合わせて矢印で表現します)。
- 登録ID → 登録部署, 登録者, 登録日
- ラベルID → ラベル内容, 手順書ID, 登録ID
- 手順書ID → 指示, 登録ID
- (従って)ラベルID → 指示(推移律)
- 梱包ID → 手順書ID, 構成集合ID, 登録ID
- リンクID → ラベルID, 梱包ID, 登録ID
- 制約:リンクで結ばれるラベルIDと 梱包IDが指す手順書IDは一致しなければならない(ラベルID → 手順書IDと 梱包ID → 手順書IDが同じ値を指すこと)。
図3では上記の向き(→)を矢印で示し、逆向き(登録ID → ラベルIDや 登録ID → 梱包ID)の矢印は具体例(表3・表4)で否定されるため描かないようにします。
誤りやすいポイント
- 登録IDが多くの関係に現れるからといって「登録ID → ラベルID」「登録ID → 梱包ID」と決めてしまう誤り。表3で登録ID 「M1」がラベルID 「L1」「L3」を持ち、表4で登録ID 「M3」が梱包ID 「P2」「P3」を持つため、登録IDはそれらを一意に決定しません。
- 属性が同一関係内にあることをもって逆向きのFD(例:ラベル内容 → ラベルID)を仮定する誤り。表1に「同じラベル内容に対して、複数のラベルIDが割り振られることがある」とあり、ラベル内容 → ラベルIDは成立しません。
- リンク制約(ラベルと梱包の手順書IDが一致)を見落として、ラベルIDまたは 梱包IDのどちらかだけを手順書IDに結びつけるだけで済ませてしまう誤り。両方が手順書IDを決定することを明示する必要があります。
- 「一時的な具体例」に基づきすぎて、本来のスキーマ制約を無視する誤り。具体例は逆向きの成立を否定する根拠として有用ですが、スキーマに明記された「一意性」を基に正方向のFDを導くことが重要です。
FAQ
Q: 表3・表4の具体例だけでFDを判断してよいですか?
A: 具体例は逆方向のFD(たとえば 登録ID → ラベルIDが成り立たないこと)を確認する重要な根拠になりますが、FDの成立を判断する際はまず表1などのスキーマ上の「属性の意味・制約」(例:「ラベルIDラベルを一意に識別するID」「ひとつのラベルには、高々1つの手順書が対応付けられる」)を基準にします。具体例はそれを補強する形で用います。
A: 具体例は逆方向のFD(たとえば 登録ID → ラベルIDが成り立たないこと)を確認する重要な根拠になりますが、FDの成立を判断する際はまず表1などのスキーマ上の「属性の意味・制約」(例:「ラベルIDラベルを一意に識別するID」「ひとつのラベルには、高々1つの手順書が対応付けられる」)を基準にします。具体例はそれを補強する形で用います。
Q: 「ラベルID → 指示」は直接の属性ではないが図に示すべきですか?
A: 手順書ID → 指示 と ラベルID → 手順書IDがあるため、推移律によりラベルID → 指示 が成り立ちます。図上は直接の矢印を引くか、手順書IDを介することで表現できますが、意味としてはラベルIDから指示が一意に決まります。
A: 手順書ID → 指示 と ラベルID → 手順書IDがあるため、推移律によりラベルID → 指示 が成り立ちます。図上は直接の矢印を引くか、手順書IDを介することで表現できますが、意味としてはラベルIDから指示が一意に決まります。
Q: リンクIDは候補キーですか?
A: 表1の定義「リンクを一意に識別するID」から、リンクIDがリンク関係の主キー(候補キー)です。同様に、ラベルID、梱包ID、手順書IDもそれぞれの要素を一意に識別するIDとして扱います。
A: 表1の定義「リンクを一意に識別するID」から、リンクIDがリンク関係の主キー(候補キー)です。同様に、ラベルID、梱包ID、手順書IDもそれぞれの要素を一意に識別するIDとして扱います。
関連キーワード: 関数従属性、主キー、外部キー、推移律、正規化
(2)
関係 “手順書ラベル” の候補キーを全て答えよ。
模範解答
{ラベルID、手順書ID}
解説
解答の導き方
まず対象の関係スキーマを確認します。表3の具体例のとおり、関係“手順書ラベル”の属性は 登録ID、手順書ID、指示、ラベルID、ラベル内容 です。
次に、設問1(1) で完成させた図3(解答例の図)から、この関係に関わる関数従属性を取り出します。
- ラベルID → ラベル内容、手順書ID、登録ID
- 手順書ID → 指示、登録ID
ラベルIDから手順書IDが決まるのは、表1に「ひとつのラベルには、高々1つの手順書が対応付けられる」とあるからです。ただし「高々1つ」なので、手順書が対応付けられていないラベルもあり得ます。また、表1に「1つの手順書には、用途に応じて0個以上のラベルが対応付けられる」とあるので、ラベルが一つも対応付けられていない手順書もあり得ます。
関係“手順書ラベル”は、手順書とラベルの両方の情報を一つの関係で表しているので、
- ラベルが対応付けられていない手順書の行(ラベルIDの値がない行)
- 手順書が対応付けられていないラベルの行(手順書IDの値がない行)
が含まれ得ます。そのため、ラベルIDだけ、手順書IDだけでは全ての行を識別できません。手順書IDとラベルIDの組 {ラベルID、手順書ID} を使うと、上の関数従属性によって 指示・ラベル内容・登録ID がすべて決まり、全ての行を識別できます。
結論:候補キーは {ラベルID、手順書ID}
誤りやすいポイント
- ラベルID → 手順書ID が成り立つことから、ラベルID単独を候補キーとしてしまう。手順書が対応付けられていないラベルや、ラベルのない手順書の行も同じ関係に入る点を見落としています。
- 登録IDを候補キーに含めてしまう。登録IDは、ラベルIDからも手順書IDからも決まる属性です。
- 最小性の検証不足:ある集合が全属性を決定すればスーパーキーですが、真部分集合で全ての行を識別できないこと(最小性)を必ず確認すること。
FAQ
Q: ラベルID単独で候補キーになりませんか?
A: ラベルID → 手順書ID は成り立ちますが、関係“手順書ラベル”にはラベルが対応付けられていない手順書の行も入り得るので、ラベルIDだけでは全ての行を識別できません。解答例も {ラベルID、手順書ID} としています。
A: ラベルID → 手順書ID は成り立ちますが、関係“手順書ラベル”にはラベルが対応付けられていない手順書の行も入り得るので、ラベルIDだけでは全ての行を識別できません。解答例も {ラベルID、手順書ID} としています。
Q: 図3にある 手順書ID → 登録ID はこの設問でどう使いますか?
A: 手順書だけの行(ラベルIDの値がない行)でも、手順書IDから登録ID・指示が決まることを示しています。ラベルだけの行では、ラベルIDから登録ID・ラベル内容が決まります。
A: 手順書だけの行(ラベルIDの値がない行)でも、手順書IDから登録ID・指示が決まることを示しています。ラベルだけの行では、ラベルIDから登録ID・ラベル内容が決まります。
関連キーワード: 関数従属性、候補キー、最小性、多重度、正規化
(3)
関係 “手順書ラベル” は、〔データの登録管理〕 の要件を満たさない。 その内容を、具体的に40字以内で述べよ。
模範解答
登録IDが一つなので手順書とラベルを独立して登録することができない。
解説
解答の論理構成
- 要件の確認
〔データの登録管理〕(2)
「同じ登録IDを用いて各要素を同時に登録したり、異なる登録IDを用いて個別に登録したりすることもできるようにする。」
すなわち “同時登録” と “独立登録” の両方を許容する設計が必要です。 - 現行スキーマの確認
関係 “手順書ラベル” の属性は
「登録ID, 手順書ID, 指示、ラベルID, ラベル内容」 の1行で 手順書 と ラベル を一体登録します。 - 要件不適合の理由
- 1行に1つの 「登録ID」 しか設定できません。
- したがって 手順書 と ラベル に異なる 登録ID を付与して 「個別に登録」 する手段がありません。
- これが上記要件(2) の “独立登録” を阻害します。
- よって模範解答のとおり、「登録IDが一つなので手順書とラベルを独立して登録することができない」という指摘が成立します。
誤りやすいポイント
- 「同じ登録IDを使えるから問題ない」と早合点し、独立登録の必要性を見落とす。
- “登録情報を外部キーで参照すれば良い” と考え、1行複合格納が抱える粒度の問題を軽視する。
- 手順書とラベルの1対多関係(1つの手順書に0個以上のラベル)に気付きながら登録管理要件との絡みを結び付けられない。
FAQ
Q: 登録IDが2列あれば要件を満たしますか?
A: いいえ。同一タプル内に複数の登録IDを置くと関数従属性が壊れ、正規化違反が生じる恐れがあります。手順書とラベルを分離し、それぞれが登録IDを持つ関係にするのが定石です。
A: いいえ。同一タプル内に複数の登録IDを置くと関数従属性が壊れ、正規化違反が生じる恐れがあります。手順書とラベルを分離し、それぞれが登録IDを持つ関係にするのが定石です。
Q: 「同時登録」だけを想定すれば現行スキーマで問題ありませんか?
A: はい。しかし要件は 「個別登録もできる」 と明記しており、現行スキーマはその後者を満たさないため不適合となります。
A: はい。しかし要件は 「個別登録もできる」 と明記しており、現行スキーマはその後者を満たさないため不適合となります。
関連キーワード: 関係スキーマ、登録ID, 正規化、関数従属性、粒度設計
(1)
関係“部品”、“調達部品”、“構成集合” の全ての候補キー、及び部分関数従属性、推移的関数従属性の有無を、“あり” 又は “なし”で答えよ。“あり”の場合は、その関数従属性の具体例を、図2中の意味の欄に示した表記法に従って示せ。
模範解答

解説
解答の論理構成
- 候補キーの抽出
- 【表1】の制約より
- “部品”: 「部品を一意に識別するID」と明言されるのは “部品ID” だけ → {部品ID} が唯一の候補キー。
- “調達部品”: 「1つの部品を複数の調達先から調達することがある」ため “部品ID” だけでは一意にならず、調達先を識別する “調達先ID” が必須 → {部品ID, 調達先ID}。
- “構成集合”: 「構成集合 ID…を一意に識別」「連番…各構成集合内で一意な番号」から また、種別ごとに “部品ID” か “リンクID” のどちらかが必ず入るため
- 【表1】の制約より
- 部分関数従属性の判定
- 複合キーを持つ“調達部品”だけが対象。
- 調達先ID→{会社名、担当者、連絡先} はキーの一部から他属性が決まるので“あり”。
- “部品” と “構成集合” は単一キーまたは部分キーによる決定が存在しないので“なし”。
- 複合キーを持つ“調達部品”だけが対象。
- 推移的関数従属性の判定
- “部品” では図4の従属性より 部品ID→タイプID かつ タイプID→タイプ名 が成立し、非キー→非キー→他非キーの形なので“あり”。
- “調達部品” では 部品ID, 調達先ID がキーであり、中間非キーを介した決定は存在しない→“なし”。
- “構成集合” の属性間に中間非キーは示されていない→“なし”。
誤りやすいポイント
- 「連番は全体で重複しない」と思い込み {連番} を候補キーにしてしまう。実際は【表1】に「各構成集合内で一意」とあるため 構成集合ID と組み合わせて初めて一意。
- “調達部品” の 部品ID→製造元 を推移従属性と誤認する。製造元はキー全体から直接決定し、推移ではない。
- “部品” の タイプID→タイプ名 を「部分従属性」と記述するミス。複合キーではないので部分従属性の定義に当てはまらない。
FAQ
Q: 推移的関数従属性かどうかは何を見れば分かりますか?
A: 「非キー属性Aが別の非キーBを決め、BがさらにCを決める」という2段階の決定が存在するかを見ます。“部品” では 部品ID→タイプID→タイプ名 が該当します。
A: 「非キー属性Aが別の非キーBを決め、BがさらにCを決める」という2段階の決定が存在するかを見ます。“部品” では 部品ID→タイプID→タイプ名 が該当します。
Q: “構成集合” に2つ候補キーがあるのはなぜですか?
A: 【表1】で「連番…各構成集合内で一意」とあるため、同じ “構成集合ID” 内では “連番” が一意。よって {構成集合ID, 連番} がキーになります。一方、連番を使わなくても “種別” に応じて 部品ID と リンクID のどちらか片方が入り、両者がNULLで重複するケースはないため {構成集合ID, 部品ID, リンクID} もキーになります。
A: 【表1】で「連番…各構成集合内で一意」とあるため、同じ “構成集合ID” 内では “連番” が一意。よって {構成集合ID, 連番} がキーになります。一方、連番を使わなくても “種別” に応じて 部品ID と リンクID のどちらか片方が入り、両者がNULLで重複するケースはないため {構成集合ID, 部品ID, リンクID} もキーになります。
Q: 部分関数従属性があると何が問題なのでしょうか?
A: 第2正規形を満たさず、更新時に重複データが発生しやすくなります。“調達部品” の会社情報は 調達先ID だけで決まるため、分離して正規化することで冗長性を排除できます。
A: 第2正規形を満たさず、更新時に重複データが発生しやすくなります。“調達部品” の会社情報は 調達先ID だけで決まるため、分離して正規化することで冗長性を排除できます。
関連キーワード: 関数従属性、候補キー、部分従属性、推移従属性、正規化
(2)
関係 “部品”、“調達部品”、“構成集合”は、それぞれ第1正規形、第2正規形、第3正規形のうち、どこまで正規化されているかを答えよ。 また、第3正規形でない関係については、第3正規形に分解した関係スキーマを示せ。
なお、分解した関係スキーマの関係名は任意とし、主キーを実線の下線で示すこと。
模範解答

解説
解答の論理構成
- 第1正規形の確認
いずれの関係も【問題文】で “ID” 単位に管理され、複数値属性や繰返し集合の記述がないため第1正規形は満たす。 - “部品” の検討
- 主キー候補は “部品ID” ― 【表1】で “部品を一意に識別するID” と明言。
- 関数従属性
- 部品ID → 登録ID, 部品名、仕様、タイプID, タイプ名
- タイプID → タイプ名(【表1】“1つの部品に対して1つのタイプが対応付けられる。”)
-
- はキーからの完全従属なので第2正規形はクリア。
-
- は非キー属性 “タイプID” が別の非キー属性 “タイプ名” を決定する推移的従属。よって第3正規形を満たさない。
- 分解:タイプ関連を独立させて “部品” と “部品タイプ” の2表へ。
- “調達部品” の検討
- 主キー候補は “部品ID+調達先ID” ― 【表1】“1つの部品を複数の調達先から調達することがある。”
- 関数従属性
- 部品ID, 調達先ID → 製造元、会社名、担当者、連絡先
- 調達先ID → 会社名、担当者、連絡先(調達先情報は調達先IDで一意)
-
- は主キーの一部だけで成立する部分従属。従って第2正規形を満たさない=第1正規形止まり。
- 分解:調達先固有情報を “調達先” に切り出し、残りを “調達部品” に。
- “構成集合” の検討
- 主キー候補は “構成集合ID+連番” ― 【表1】“連番は各構成集合内で一意な番号”。
- 他の属性(種別、個数、部品ID, リンクID)はこの複合キーに完全従属し、非キー属性間の決定関係が示されていない。
- よって部分従属も推移的従属もなく、第3正規形を満たす。
誤りやすいポイント
- “登録ID” を主キーに含めるかどうか
“登録ID” は “登録を一意に識別するID” ですが、各業務エンティティを一意にするとは限りません。実体側のIDを優先して候補キーを立てることが重要です。 - “第2正規形=非キー属性が1つだけ” という誤解
非キー属性が複数あっても、主キーが単一なら部分従属は起こり得ません。 - “調達部品” の “製造元” を見落とす
製造元は部品とセットで決まる場合も想像できますが、問題文には決定関係が示されていないためキー全体従属として扱うのが安全です。
FAQ
Q: “タイプID → タイプ名” が推移的従属に数えられるのはなぜですか?
A: 主キー “部品ID” が “タイプID” を決定し、さらに “タイプID” が “タイプ名” を決定するので “部品ID → タイプ名” が間接的に成立します。非キー属性を経由した従属は推移的従属に該当し、第3正規形違反となります。
A: 主キー “部品ID” が “タイプID” を決定し、さらに “タイプID” が “タイプ名” を決定するので “部品ID → タイプ名” が間接的に成立します。非キー属性を経由した従属は推移的従属に該当し、第3正規形違反となります。
Q: “調達先ID” を主キーにすれば第2正規形になりますか?
A: できません。“調達部品” は “部品ID” との組で同じ調達先から複数部品を仕入れるケースを考慮しています。両方含めないと一意性を保証できず、主キーを変えても部分従属の問題は残ります。
A: できません。“調達部品” は “部品ID” との組で同じ調達先から複数部品を仕入れるケースを考慮しています。両方含めないと一意性を保証できず、主キーを変えても部分従属の問題は残ります。
Q: “構成集合” で “部品ID” と “リンクID” がNULLになる行は第3正規形違反ですか?
A: NULL値の有無は正規形の判定基準ではありません。重要なのは関数従属性の構造であり、ここでは非キー属性間の従属が示されていないため第3正規形です。
A: NULL値の有無は正規形の判定基準ではありません。重要なのは関数従属性の構造であり、ここでは非キー属性間の従属が示されていないため第3正規形です。
関連キーワード: 関数従属性、第2正規形、第3正規形、推移的従属、部分従属
(1)
関係 “登録”、“手順書ラベル”、“梱包”、“リンク” に対して、表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]
ケ:選択、結合、射影
解説
解答の論理構成
- 【問題文】では「表6は、関係代数演算の表記法を示したものである。」とあり、選択・射影・結合の書式が厳密に定義されています。
- (②) の検索内容は「手順書IDが “b” で登録された梱包」。対象は “梱包” だけで完結しますから、演算対象 (ア) は 梱包、演算式 (イ) は 梱包[手順書ID =“b”]、適用演算 (ウ) は 選択 です。
- (③) は「ラベルIDが “c” の梱包」を求めるため “リンク” と “梱包” を突き合わせる必要があります。【問題文】の表4・リンク例から「梱包ID」が共通項であると分かるため
• 演算対象 (エ) : リンク、梱包
• 演算式 (オ) : ((リンク[ラベルID =“c”])[梱包ID = 梱包ID]梱包)[手順書ID、構成集合ID]
• 適用演算 (カ) : 選択、結合、射影
となります。 - (④) は「登録日が “d” の梱包」。まず “登録” で日付条件を掛けてから “梱包” と結合します。
• 演算対象 (キ) : 登録、梱包
• 演算式 (ク) : ((登録[登録日 =“d”])[登録ID = 登録ID]梱包)[登録者、手順書ID、梱包ID]
• 適用演算 (ケ) : 選択、結合、射影 - いずれも【問題文】表6「射影R[属性、…]」「選択R[属性 制限記号 値]」「結合R[属性 = 属性] S」の書式に忠実です。
誤りやすいポイント
- 「手順書ID」と「梱包ID」など、同名属性を持たない関係を誤って結合キーに選んでしまう。
- 複数の操作が必要な場合に 射影 を最後に書き忘れ、不要な列まで残してしまう。
- “登録日が “d”” の条件を “梱包” に直接掛けてしまい、正しく絞り込めない。
FAQ
Q: 結合条件を先に書くか、選択条件を先に書くかで点数は変わりますか?
A: 同値結合と選択は可換なので結果が同じになる式なら問題ありません。表7 (オ)・(ク) に代替式が示されている通りです。
A: 同値結合と選択は可換なので結果が同じになる式なら問題ありません。表7 (オ)・(ク) に代替式が示されている通りです。
Q: 「商」演算を使う場面は出題されないのでしょうか?
A: 本問では必要な検索条件が単純選択と同値結合で表現できるため「商」は使いません。複数条件を“全て満たす”集合を求めるケースで登場します。
A: 本問では必要な検索条件が単純選択と同値結合で表現できるため「商」は使いません。複数条件を“全て満たす”集合を求めるケースで登場します。
Q: “リンク” と “梱包” を結合するキーはどこで判断しますか?
A: 【問題文】表1「リンクID」の説明に「この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」とあり、表5の具体例にも “梱包ID” が掲載されているため、自然結合キーは “梱包ID” です。
A: 【問題文】表1「リンクID」の説明に「この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」とあり、表5の具体例にも “梱包ID” が掲載されているため、自然結合キーは “梱包ID” です。
関連キーワード: 関係代数、選択演算、結合演算、射影演算、キー属性
(2)
表2〜5の具体例に対して、登録日が “2012-04-10" で、表7中の項番 ④ の検索要求があった場合、その検索結果を解答欄の表に示せ。
なお、表の欄は全て埋まるとは限らない。

模範解答

解説
解答の論理構成
- 登録日の絞り込み
関係 “登録” (表2) のうち、属性 “登録日” が “2012-04-10” のタプルは
“M3”“山田”“2012-04-10”、“M4”“木村”“2012-04-10” の2行。 - 登録IDで梱包を取得
表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”
- 結果整形
要求された3列のみの表で提示し、空欄は不要なので4行で完了。
誤りやすいポイント
- “登録ID” と “手順書ID” を直接結合しようとしてしまう
- “登録日” 条件を “梱包” 側に誤って適用し、行を取りこぼす
- “リンク” や “手順書ラベル” を結合に含め、結果が倍増する
FAQ
Q: “2012-04-10” 以外の列を持つタプルが含まれるのはなぜ?
A: 取り出したのは “登録” のタプルではなく、“登録” と結合した “梱包” のタプルです。結合後は “梱包” 側の列を表示しているため、他の日付列は現れません。
A: 取り出したのは “登録” のタプルではなく、“登録” と結合した “梱包” のタプルです。結合後は “梱包” 側の列を表示しているため、他の日付列は現れません。
Q: 同じ “手順書ID” が重複して出る場合は排除しないのですか?
A: 射影の重複排除は列の組合せが完全に同一の場合に働きます。今回 “梱包ID” が異なるため、両行とも残ります。
A: 射影の重複排除は列の組合せが完全に同一の場合に働きます。今回 “梱包ID” が異なるため、両行とも残ります。
Q: “④” がどの演算を表すのか確認する方法は?
A: 問題中の “表6 関係代数演算の表記法” を参照し、式中の演算子をたどることで確認できます。
A: 問題中の “表6 関係代数演算の表記法” を参照し、式中の演算子をたどることで確認できます。
関連キーワード: 関係代数、射影、選択、結合、主キー








