リレーショナルデータベースの基本

2009年10月6日(火)
藤本 壱

1つのマス目に1つのデータを入れる「第1正規形」

 前のページで結合について述べましたが、結合をうまく行うためには、データを適切にテーブルに分ける必要があります。

 この作業のことを、「正規化」と呼びます。また、正規化には段階があって、「第1正規形」から「第5正規形」までがあります。ただし、一般には第3正規形までの正規化を行うことが多いです。

 例えば、文具の卸を行っている企業で、販売した商品に関するデータを表にして管理したいとします。単純に表にすると図3-1のような形になるでしょう。

 この表を見ると、1つの伝票に対して複数の商品があります。1件の伝票を1つの行に対応させるとすると、「商品番号」や「商品名」などの列では、1つのマス目に複数の値を入れる状態になります。

 このような状態をなくし、1つのマス目には1つのデータだけを入れるようにした形のことを、「第1正規形」と呼びます。

 第1正規形を作る際には、1つのマス目に複数の値が入る列を、元のテーブルから切り離して別のテーブルにします。そして、切り離した後のテーブルの、切り離す元のテーブルとの結合関係が分かるような列を作ります。

 表1の例だと、「販売先」までの列と、「商品名」から後の列とで、テーブルを2つに分けます。そして、商品に関するテーブルにも「伝票番号」の列を入れておいて、2つのテーブルを結合できるようにします(図3-2参照)。

重複するデータを2つのテーブルに分ける「第2正規形」「第3正規形」

 テーブルの列の中で、個々の行を識別するのに使える列(または列の組み合わせ)のことを、「主キー」と呼びます。

 例えば、図3-2の伝票メインテーブルでは、「伝票番号」列は行(個々の伝票)ごとに違った値になりますので、主キーになります。また、伝票サブテーブルでは、「伝票番号」列と「商品番号」列の値の組み合わせで個々の行を識別できます。したがって、これら2つの列の組み合わせが主キーになります。

 また、テーブルの列同士の間には、「ある列の値が決まると、別の列の値も決まる」という性質があります。例えば、図3-2の伝票メインテーブルでは、「伝票番号」列の値が決まると、「日付」列の値も決まります。このような関係のことを「関数従属」と呼びます。関数従属には、以下の3種類があります。

1)完全関数従属…ある列が主キーに関数従属する
2)部分関数従属…ある列が主キーの一部の列に関数従属する
3)推移的に関数従属…ある列が主キー以外の列に関数従属する

 例として、図3-2の2つのテーブルで、主キーの列と、列間の関数従属の関係を調べてみましょう。

 前述したように、伝票メインテーブルでは、主キー(「伝票番号」列)が決まると「日付」列の値も決まります。したがって、「日付」列は主キーに完全関数従属しています。同様に、「販売先番号」列も主キーに完全関数従属しています。

 一方、「販売先」列は「販売先番号」列によって決まる列で、主キーには直接には関数従属しておらず、推移的な関数従属の関係になっています。

 次に、伝票サブテーブルを調べてみます。このテーブルの主キーは、「伝票番号」列と「商品番号」列の組み合わせです。

 「個数」列は主キーで決まるので、完全関数従属です。一方、「商品名」列と「単価」列は「商品番号」列によって決まります。「商品番号」列は主キーの一部なので、「商品名」列と「商品番号」列の関係は、部分的関数従属です。また、「単価」列と「商品番号」列も部分的関数従属の関係です(図3-3参照)。

 部分関数従属や推移的な関数従属があると、1つのテーブルの中に同じ値を何度も入力する場面が出てきます。例えば、図3-2の伝票メインテーブルには、同じ販売先の情報を何度も入力する必要があります。

 部分関数従属している列を別のテーブルに分けると、「第2正規形」になります。また、推移的に関数従属している列を別のテーブルに分けると、「第3正規形」になります。ここまでの正規化を行うと、1つのテーブルに同じデータを何度も入力することがなくなり、無駄がなくなります。

 例えば、図3-2の2つのテーブルを第3正規形まで分解すると、図3-4の4つのテーブルに分かれます。伝票サブテーブルから商品の情報を分離すると、第2正規形になります。また、伝票メインテーブルから販売先の情報を分離すると、第3正規形になります。

 ここまでで第1回は終わりです。今回は、データベースとは何かというところから、現在の主流であるリレーショナルデータベースの考え方について解説してきましたが、いかがだったでしょうか。

 次回はSQLの基本について解説していく予定です。

【参考文献】

藤本壱『これだけは知っておきたいデータベースの常識』技術評論社(発行年:2009)

1969年生まれ。神戸大学工学部電子工学科卒。ソフトメーカー勤務後、フリーライターとして独立。現在では、パソコン関係およびマネー関係の書籍を中心に執筆活動を行っている。ブログ「The blog of H.Fujimoto」は、Movable TypeやWordPressの情報を中心に毎日更新している(http://www.h-fj.com/blog/)。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています