主キーと外部キー

Image from Gyazo

本日のリレーション

今回は下記の 【学生リスト】【学部リスト】 を対象に解説します. 【学生リスト】は,学籍番号,氏名,学年,学部,また, 【学部リスト】は,学部,キャンパス,教員数で構成されています.

学籍番号 氏名 学年 学部
A001 岩城隼人 2 工学部
A002 岩村優 1 工学部
B003 杉江弘子 3 人文学部
C004 仙波あすか 1 国際関係学部

【学生リスト】

学部 キャンパス 教員数
工学部 春日井 30
人文学部 春日井 20
国際関係学部 名古屋 25

【学部リスト】

主キー

リレーショナルデータベースの運用において タプル(レコード)の検索や更新などの処理は必須です. 検索や更新を正しく行うには, リレーションに含まれる所定のタプルを一意に同定する必要があります.

例えば,【学生リスト】でタプルを検索することを考えてみましょう. 下記の学生証の学生をどのように検索したら良いでしょうか.

Image from Gyazo

学年学部で検索することは問題がありそうですね. なぜなら,「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) です.

では,【学生リスト】と【学部リスト】の参照関係を考えてみましょう. いずれのリレーションにも 学部 が存在していますね. どうやらこの 学部 が参照関係にありそうです. ここで,【学部リスト】の 学部 は主キーです. 主キー制約により,重複する値は存在せず,空値となることはありません. 一方,【学生リスト】の 学部 は,主キーではないため,重複や空値が存在する可能性があります.

Image from Gyazo

このことから,【学生リスト】の 学部 は【学部リスト】の 学部 を参照していると考ることができそうです. つまり,【学生リスト】の 学部 に出現する値は,【学部リスト】の 学部 に存在する値から選ぶ必要があります. このとき,【学生リスト】の 学部外部キー と呼びます.

外部キーであるためには,下記の外部キー制約を満たす必要があります.

外部キー制約

  • 外部キーの値は,参照先の属性に出現する値から選ばれる.
  • 外部キーは空値(NULL)を含むことが許される.

外部キーは主キーとは異なり,空値を含むことが許される点に注意してください, このため,下記のようなタプルを【学生リスト】に追加することに問題はありません.

学籍番号 氏名 学年 学部
A003 内田弘 3

例題4

関係データベースで管理された業者表,仕入明細表及び商品表がある. 新たな業者から新たな商品を仕入れた場合, 表にデータを追加する適切な順番を理由を挙げて説明せよ. 下線は主キーを示し,破線は外部キーを示す. (平成22年度 秋期 ITパスポート)

業者コード 業者名
業者表
伝票番号 枝番 日付 商品コード 数量
仕入明細表
商品コード 商品名 業者コード 単価
商品表

情報処理技術者試験・過去問

下記リンクは ITパスポート試験ドットコム基本情報技術者試験ドットコム応用情報技術者試験ドットコムに掲載されている問題です.

参考書籍

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.