IT

関係データベースの基本を解説(正規化や主キーと外部キーなど)

データベースとは、情報の保存・蓄積・検索を容易にするための手段のことである。データベースにはいくつかの種類があるが、その中でも現在の主流である関係データベースについて解説する。この記事ではあまり細かいことに突っ込むつもりはなく、あっさり目の解説を試みる。

関係データベースとはで構成される表の形でデータを管理するタイプのデータベースである。表の横列の事を行といい、縦列のことを列という。

ちなみに表の中身は楽天の選手(データは2020年3月11日時点のもの)である。

データベースの正規化とは

データベースは大規模になるほど、データに矛盾や重複を存在しないように管理するのが難しくなる。そこで登場するのが正規化という考え方である。

例えば次のデータベースの場合で考えてみよう。

これは一昔前のパリーグの選手表である。ある時、ダイエーという所属チームの名前がソフトバンクに変わってしまった。そうなった場合、データベースを書き換えなければならない。

このままだと、「ダイエー」の部分を一つ一つ「ソフトバンク」に変えていくわけだが、データが大量にある場合、面倒だし書き換え忘れといったミスが生じる恐れがある。

所属名が変わることはそんなに珍しいことではない。そこで、次のように表を分けて作ると便利である。

このようにデータベースを作っておけば、ダイエーがソフトバンクに変わっても、右の表の一か所を修正するだけでよくなる。これなら重複ミスも起こりにくくなるだろう。

主キーと外部キー

データベースを扱う場合には、あるデータをピンポイントで特定できる鍵となる情報が必要である。この「あるデータをピンポイントで特定できる鍵となる情報」のことを主キーという。野球選手の例でいえば、背番号が主キーに該当する。名前は同姓同名が出現する可能性を考慮して主キーに使われることはあまりない。

主キーには以下のような条件がある

  • 一意性制約  ➡ 主キーのなかでダブりがあってはならない
  • NOT NULL制約 ➡  主キーが未設定であってはならない(主キーの列に空白は許されない)

 

一方で、正規化をするなどして表が二つ以上に分かれる場合に、表同士を関連付ける情報が必要となる。先ほど示した正規化の例でいえば、「所属番号」が二つの表を関連付けるための役割を担っている。このような情報を外部キーという。

外部キーで参照する先の表には、その外部キーと同一の値が存在しなければならない。これを参照制約という。先ほどの正規化した表の例でいえば、左の表に巨人所属の選手を入れてはいけないし、右の表から「1 ダイエー」を消去してはいけない。