データベースの学習を始めると基礎理論の中で正規化の話が出てきますね。
使い易い綺麗なデータベースにするための正規化ですが、正規化においては「キー」というものを設定する必要があります。
このキーですが、いろんな種類があって混乱してしまいがちです...
今回はデータベースにおけるキーに関して解説します!
各キーの種類と関係性は?
キーの種類は調べると7つに分けられるようですが、やはりよく出てくるが以下の4つのようです。
- 主キー、外部キー、候補キー、代理キー
この4つにキーに関して詳しく解説していきます!
他のキーとして、「自然キー、代用キー、スーパキー(super key)」というものもありますが、これらのキーに関しては以下サイトをご参照ください。
メサイア・ワークス(データベースに色々あるキーについて、調べてみたら7種類もあったので備忘録的に列挙してみた)
先ずは候補キー!
候補キー(candidate key)とは以下のような定義となります。
候補キーとは
リレーショナル(関係的)なデータベースにおいて、ある行(タプル)を一意に識別できる属性または属性の組のうち最小のもの
簡単に表現すると「行を特定するための主キーの候補となりえる情報」のことです。(主キーは後ほど出てきます)。
言葉だと難しいので、絵にしてみました。
主キーと代理キーとは?
実は候補キーを理解していると主キー(primary key)と代理キー(alternate key)の理解は簡単です。
主キーとは
候補キーの中から一つを選んだもの。主キーは空値を取らない(NOT NULL)
代理キーとは
候補キーの中から主キーに選ばれなかったキーのこと
こちらも絵にすると以下のような感じとなります。
主キーが決まると、その他の候補キーを使って第2正規形、第3正規形へと正規化が進んでいきます。
では、続いて外部キーの話に進んでみましょう!
外部キーとは?
最後に外部キー(foreign key)ですが、以下のような定義があります。
外部キーとは
複数のテーブルの関係を結び付けるためのキーのこと
こちらも例を絵にしてみました。
結び付けられた二つの表は元々は同じ表だったため、二つの表を結びつけるキーの値は同じである必要があります。そうなると、外部キーで繋がっている行(タプル)を削除する時には注意が必要となります。
外部キーで設定している値の参照先の行を削除してしまう(図の顧客表の行)を削除してしまうと、参照元(図の受注表)で情報を参照することが出来なくなってしまいます...
よって、外部キーで 繋がっている行を削除することは基本的にはできないことになっていますが、候補キー側の情報を削除したときに、対応する外部キーの行を一緒に削除する「カスケード」という手法もあります。
このように、互いに関係している外部キーによる制約のことを参照制約(外部キー制約)と呼びます。
キーの表現ルール
データベースを設計したり、操作する上で各種キーを表現するときには以下のようなルールがあります。
キーを表現するときルール
- 主キーは実線の下線を属性名の下に付ける。
- 外部キーは破線の下線を 属性名の下に付ける。
- 主キーであり、外部キーである場合は二重線の下線を 属性名の下に付ける。(主キーのみの実線で表現することもあります)
データベーススペシャリスト試験とかでもよく出てくる重要な表現方法ですね。
まとめ
今回はデータベースにおける、各種キーに関して解説しました。
キーの定義をしっかり覚えることで、データベースの正規化を行っていくのですね。
候補キーにもあてはまらない属性ことは「非キー属性」と呼びます。
また、「スーパーキー(super key)」という凄い名前のキーがありますが、これは行を特定できるのであれば、どんな組み合わせで作っても良いキーのことですが、自分的にはスーパー感あまりないです(笑)
以上です!