データベーススペシャリスト試験 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〜3に答えよ。
設問1:図3について(1)〜(3)に答えよ。
(1)図3の関数従属性を、 図2中の凡例の欄に示した表記法に従って完成させよ。模範解答

解説
解答の論理構成
-
ラベルと手順書
- 【表1】より「ひとつのラベルには,高々1つの手順書が対応付けられる。」
- 高々1つ = ラベル ID が決まれば手順書 ID が一意 → ラベル ID → 手順書 ID。
-
梱包と手順書
- 【表1】より「1つの梱包には1つの手順書が対応付けられる。」
- したがって梱包 ID が決まれば手順書 ID が一意 → 梱包 ID → 手順書 ID。
-
リンクとラベル・梱包
- 【表1】より「この1つのリンクには1つのラベルおよび1つの梱包が対応付けられる。」
- リンク ID が決まれば両者が一意に定まる → リンク ID → ラベル ID, 梱包 ID。
これら3つを図2の矢印(決定側→決定される側)で表せば、設問(1)〜(3)の空欄が埋まります。
誤りやすいポイント
- 「0 個以上」の存在側(決定元)と「高々 1 つ」の一意側(決定先)を取り違える。
- 手順書 ID → ラベル ID と逆向きにしてしまう(ラベルは複数可なので成り立たない)。
- リンク ID がラベル ID と梱包 ID “両方”を決定することを見落とし、片方だけ書く。
FAQ
Q: 「高々1つ」と「1つ」の違いは FD に影響しますか?
A: 決定先が多重度1でも高々1でも、片方向の一意性が保証される点で FD は成立します。
A: 決定先が多重度1でも高々1でも、片方向の一意性が保証される点で FD は成立します。
Q: 「0 個以上-1 個」の関係で、決定先が 0 個の場合は FD にならないのでは?
A: FD は“存在するなら一意”が条件です。存在しないケース(NULL など)は FD の評価対象外と考えます。
A: FD は“存在するなら一意”が条件です。存在しないケース(NULL など)は FD の評価対象外と考えます。
関連キーワード: 関数従属性, 一意性制約, カーディナリティ, 関係スキーマ, データモデル
設問1:図3について(1)〜(3)に答えよ。
(2)関係 “手順書ラベル” の候補キーを全て答えよ。模範解答
{ラベル ID,手順書 ID}
解説
解答の論理構成
- 関係 “手順書ラベル” の属性
【問題文】より
「登録ID, 手順書ID, 指示, ラベルID, ラベル内容」 - 関数従属性を整理
- 「ひとつのラベルには,高々1つの手順書が対応付けられる」
⇒ ラベル ID → 手順書 ID - 「1つの手順書には,用途に応じて 0 個以上のラベルが対応付けられる」
⇒ 手順書 ID → ラベル ID は成り立たない - 「同じラベル内容に対して,複数のラベル ID が割り振られることがある」
⇒ ラベル内容は決定項にならない - 「複数の手順書が同じ URL を参照することがある」
⇒ 指示(URL)は決定項にならない - 「同じ登録 ID を用いて各要素を同時に登録したり…できる」
⇒ 登録 ID は重複し得る
- 「ひとつのラベルには,高々1つの手順書が対応付けられる」
- キー候補の検討
① ラベル ID 単独
登録を分けて同一ラベル ID を再利用できるため一意性を欠く。
② 登録 ID+ラベル ID
登録 ID が同じでも異なるラベル ID を持つタプルが存在し得る(表3の “M1 – L1” と “M1 – L3”)。
③ ラベル ID+手順書 ID
ラベル ID が決定すると手順書 ID も決まるため、この2属性でタプルを一意に識別でき、さらに削除不能(最小)である。 - よって候補キーは {ラベル ID,手順書 ID} となります。
誤りやすいポイント
- 「ラベル ID は一意な識別子だから単独キー」と早合点する。登録履歴による重複を見落とさないこと。
- 「登録 ID を含めれば安全」と考えがちだが、最小性を満たさず候補キーにならない。
- 関数従属性の向きを逆に読んで「手順書 ID → ラベル ID」と誤解するケース。
FAQ
Q: 「登録 ID」は候補キーになり得ますか?
A: なりません。同じ登録 ID で複数のラベルを追加できるため、一意性を保証しません。
A: なりません。同じ登録 ID で複数のラベルを追加できるため、一意性を保証しません。
Q: 「指示(URL)」をキーに含める必要はありますか?
A: 必要ありません。「複数の手順書が同じ URL を参照することがある」ため決定項にならず、一意性にも寄与しません。
A: 必要ありません。「複数の手順書が同じ URL を参照することがある」ため決定項にならず、一意性にも寄与しません。
Q: 候補キーが複数ある場合はどう判定しますか?
A: 全ての候補キーを列挙し、その中で最小属性集合かつ一意性を持つものを答えます。本問ではそれが{ラベル ID,手順書 ID}のみです。
A: 全ての候補キーを列挙し、その中で最小属性集合かつ一意性を持つものを答えます。本問ではそれが{ラベル ID,手順書 ID}のみです。
関連キーワード: 関数従属性, 候補キー, 一意性制約, 正規形, 管理属性
設問1:図3について(1)〜(3)に答えよ。
(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, 正規化, 関数従属性, 粒度設計
設問2:図4に示す関数従属性に基づいて,(1),(2)に答えよ。
(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:図4に示す関数従属性に基づいて,(1),(2)に答えよ。
(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正規形, 推移的従属, 部分従属
設問3:表2〜6について,(1),(2)に答えよ。
(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” です。
関連キーワード: 関係代数, 選択演算, 結合演算, 射影演算, キー属性
設問3:表2〜6について,(1),(2)に答えよ。
(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 関係代数演算の表記法” を参照し,式中の演算子をたどることで確認できます。
関連キーワード: 関係代数, 射影, 選択, 結合, 主キー