主キーと外部キー
本日のリレーション
今回は下記の 【学生リスト】 と 【学部リスト】 を対象に解説します. 【学生リスト】は,学籍番号,氏名,学年,学部,また, 【学部リスト】は,学部,キャンパス,教員数で構成されています.
学籍番号 | 氏名 | 学年 | 学部 |
---|---|---|---|
A001 | 岩城隼人 | 2 | 工学部 |
A002 | 岩村優 | 1 | 工学部 |
B003 | 杉江弘子 | 3 | 人文学部 |
C004 | 仙波あすか | 1 | 国際関係学部 |
【学生リスト】
学部 | キャンパス | 教員数 |
---|---|---|
工学部 | 春日井 | 30 |
人文学部 | 春日井 | 20 |
国際関係学部 | 名古屋 | 25 |
【学部リスト】
主キー
リレーショナルデータベースの運用において タプル(レコード)の検索や更新などの処理は必須です. 検索や更新を正しく行うには, リレーションに含まれる所定のタプルを一意に同定する必要があります.
例えば,【学生リスト】でタプルを検索することを考えてみましょう. 下記の学生証の学生をどのように検索したら良いでしょうか.
学年や学部で検索することは問題がありそうですね. なぜなら,「1年」は岩村さんだけでなく,仙波さんも該当しています. 同様に,「工学部」は岩城さんも該当しています. これでは,一意に同定することは出来ません.
では,学籍番号や氏名ではどうでしょうか. 「A002」や「岩村優」は,他のタプルと重複しておらず, 所定の学生を同定することが出来そうです. しかし,氏名に関しては,今回のケースでは, たまたま同姓同名の学生がいなかっただけで, データベースを運用している過程で, 重複が発生する可能性がありそうです.
よって,【学生リスト】においては, 学籍番号で検索するのが最も適していると言えそうです. このように,その値を指定すると特定のタプルを一意識別できる属性(複数の属性をまとめることも可能)を 主キー(Primary Key)と呼びます (正確には候補キー(Candidate Key)であり,その中で最も適切な一つを選び主キーとします).
主キーであるためには,下記の主キー制約を満たす必要があります.
主キー制約
- 主キーはタプルの一意識別能力を持つ(重複しない).
- 主キーは空値(NULL)を含まない.
一つ目の条件は上述した通りです. 二つ目の条件は属性に値が設定されていない状態(空値と呼ぶ)は認められないことを意味しています. 例えば,下記のようなタプルを【学生リスト】に追加することが出来ません. もし,このようなタプルを認めてしまうと,主キーである学生番号で一意識別が出来なくなってしまいます.
学籍番号 | 氏名 | 学年 | 学部 |
---|---|---|---|
内田弘 | 3 | 工学部 |
例題1
【学部リスト】における適切な主キーは何か.
例題2
【社員表】における適切な主キーは何か.
社員番号 | 保険証番号 | 入社年度 | 部署 |
---|---|---|---|
E01 | 2739 | 2016 | 営業 |
E02 | 9281 | 2018 | 人事 |
E03 | 3610 | 2019 | 人事 |
E04 | 7232 | 2020 | 営業 |
例題3
【納品表】における適切な主キーは何か.納品表は特定の顧客に特定の商品を納品した数を記録するために用いる.
商品番号 | 顧客番号 | 納品数 |
---|---|---|
G1 | C1 | 10 |
G1 | C2 | 15 |
G2 | C1 | 20 |
G3 | C3 | 10 |
外部キー
一般にリレーショナルデータベースは,複数のリレーションで構成されます. 今回対象としてるリレーションも【学生リスト】と【学部リスト】に分けて管理されています. これらのリレーションは,お互いに値を参照することで,関連付けられることがあります. この関連付けを定義するのが 外部キー(Foreign Key) です.
では,【学生リスト】と【学部リスト】の参照関係を考えてみましょう. いずれのリレーションにも 学部 が存在していますね. どうやらこの 学部 が参照関係にありそうです. ここで,【学部リスト】の 学部 は主キーです. 主キー制約により,重複する値は存在せず,空値となることはありません. 一方,【学生リスト】の 学部 は,主キーではないため,重複や空値が存在する可能性があります.
このことから,【学生リスト】の 学部 は【学部リスト】の 学部 を参照していると考ることができそうです. つまり,【学生リスト】の 学部 に出現する値は,【学部リスト】の 学部 に存在する値から選ぶ必要があります. このとき,【学生リスト】の 学部 を 外部キー と呼びます.
外部キーであるためには,下記の外部キー制約を満たす必要があります.
外部キー制約
- 外部キーの値は,参照先の属性に出現する値から選ばれる.
- 外部キーは空値(NULL)を含むことが許される.
外部キーは主キーとは異なり,空値を含むことが許される点に注意してください, このため,下記のようなタプルを【学生リスト】に追加することに問題はありません.
学籍番号 | 氏名 | 学年 | 学部 |
---|---|---|---|
A003 | 内田弘 | 3 |
例題4
関係データベースで管理された業者表,仕入明細表及び商品表がある. 新たな業者から新たな商品を仕入れた場合, 表にデータを追加する適切な順番を理由を挙げて説明せよ. 下線は主キーを示し,破線は外部キーを示す. (平成22年度 秋期 ITパスポート)
業者コード | 業者名 |
---|
伝票番号 | 枝番 | 日付 | 商品コード | 数量 |
---|
商品コード | 商品名 | 業者コード | 単価 |
---|
情報処理技術者試験・過去問
下記リンクは ITパスポート試験ドットコム, 基本情報技術者試験ドットコム, 応用情報技術者試験ドットコムに掲載されている問題です.