今回は、テーブルの正規化に関する内容だね!
楽しみです!
・正規化について
アプリケーション開発において、テーブル設計が重要なのは、開発に携わったことがある人なら誰でも知っていることだと思います。しかしながら、具体的にどのように設計すればよいのかを知っている人は意外にも多くありません。そこで本記事では、テーブル設計の基本的な考え方である正規化について紹介したいと思います。
正規化とは、データの重複をなくし、データの更新に適したテーブルとなるように整理する作業です。正規化には、第一正規化から第五正規化まであります。実務で使われるのは第三正規化までなので、今回は第一正規化から第三正規化までの手順を紹介します。なお、第一正規化されたテーブルを第一正規形、第二正規化されたテーブルを第二正規形、第三正規化されたテーブルを第三正規形と呼びます。
正規化の手順を説明する前に、正規化のメリットについて説明しておきましょう。具体的には、以下の3つが考えられます。
・データの重複を排除することで、データの不整合を防ぐことができます。
・データの検索や更新を効率化することができます。
・データの冗長性を排除することで、データベースのサイズを削減することができます。
それでは、第一正規化から第三正規化まで順を追って説明していきます。今回は、以下のテーブルを正規化することにします。
第一正規形は、以下の条件を満たす必要があります。
テーブル中に複数の値を持つようなデータ項目を含まない
先のテーブルでは、資格の項目に、{英検1級, 簿記1級} と、複数の値が入っています。この場合、値ごとに行を分ける必要があります。
第二正規形は、以下の条件を満たす必要があります。
第一正規形のテーブルに対して、主キーの一部の項目だけに従属するような項目(部分関数従属と呼ぶ)を含まない
第一正規化が終わると、今度は属性間の関係に注目します。今回のテーブルでは、主キーが社員番号と資格の複合キーになっているとします(主キーが単独属性の場合、部分関数従属が起こることがないので、第二正規化を行う必要はありません)。なお、以下では主キーを太字で表します。
一般的に、社員番号が決まれば、氏名、部署番号、部署名は一意に決まります。しかし、資格が決まってもこれらの属性が決まることはありません。つまり、氏名、部署番号、部署は主キーに対して部分関数従属することになります。したがって、テーブルから社員番号を分離し、社員番号と資格のテーブルを新たに追加します。
第三正規形は、以下の条件を満たす必要があります。
第二正規形のテーブルに対して、主キー以外の項目に従属するような項目(推移的関数従属と呼ぶ)を含まない
1番目のテーブルを見ると、部署名は部署番号によって決まります。つまり、部署名は主キーである社員番号ではなく部署番号に従属しているということになります。したがって、部署番号と部署名を分離して、新たなテーブルを作ります。
以上で、第三正規化まで終わりました。この作業手順を追うことで、初心者でもテーブル設計ができるようになります。
本記事では、テーブルの正規化について説明しました。これはテーブル設計において基本的な考え方であるため、しっかりと理解しておくと開発に役立つと思います。テーブル設計には他にも重要な考え方があるので、機会があればまた紹介したいと思います。
各種お問い合わせ