PR

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

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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