トップ > スキル : アプリケーション > Access(アクセス) > 基礎編(各オブジェクトの概要)

Access

各オブジェクトの概要

テーブルの正規化

適切な正規化を行って作成されたテーブル構造は、作業時のパフォーマンスを向上させ、データ量を最小限に抑え、データの重複を防ぐ効果があります。
この正規化は面倒な作業ですが、テーブル作成作業の中で、この正規化を基にして作成すると、後々失敗のないデータベースを構築できます。以下のようなテーブルがあるとします。下の図は、非正規形のテーブルです。

非正規形

第一正規化

第1正規化は、「すべての属性が異なった値を持っている」ことが規則です。非正規形のテーブルを見ると一つのフィールド(列)に複数のデータが存在します。このように各列(フィールド)に複数のデータを入れないようにテーブル内容を作り変えると下図のようになります。(この図では、商品名のデータが1つになるようにレコードを切り分けています。)

第1正規化

次に、導出フィールドを排除します。"導出フィールド"とは、他のフィールドから値を導き出せるデータのことです。テーブルを見ると、「氏名」フィールドは、「姓」と「名」のフィールドを結合することで得られます。このような「氏名」フィールドの列を“導出フィールド”と呼び、正規化を行う場合は、このような余分なフィールドを排除する必要があります。

導出フィールドの削除

1つの枠に配列(繰り返し)を入れないことが第1正規形です。(上の図では、氏名フィールドを削除しています。)

第二正規化

第1正規形のテーブルで、顧客IDから姓、名、住所、担当者が決まります。また、商品名も商品IDを設ければ、商品情報を格納するテーブルから参照できます。
このように、キーとなる列の値が決まれば、他の列の値が決まるようなテーブルを分割した状態にできます。これが第2正規形です。(下の図では、顧客IDと商品IDを共通のフィールドにして各テーブルにテーマごとに整理しています。)

上図のように分割すると、1つのテーブル内の情報はあるテーマに沿った情報のみになります。このように切り分けることによって、個別に情報を管理でき、また柔軟なデータの活用が可能となります。
切り分けるポイントは、テーブル同士を関連付けさせるために、共通のフィールドを設けることです。

第三正規化

主キーとなるフィールド以外の値によって、他の列の値が決まることがない状態にテーブルを分割した状態にします。簡潔に言えば“従属関係である部分”を、別テーブルに分割することです。

第2正規形の図の中央の顧客テーブルを見ると、顧客名や担当者名が繰り返し出てきます。このような場合には、テーブルを分割することによって、データそのものを整理することができます。

上の図のように顧客テーブルと担当者テーブルを分割します。また、上図の左端の売上テーブルにおいて、レコードを一意に決めておくための、「売上NO」を追加します。

実際に別テーブルに切り分けてしまうと、たくさんの小さいテーブルを多く作成することになり、パフォーマンスや作業効率の低下を招いてしまいます。第3正規化は、テーブルの利用形態などをよく考えてから、データ更新の頻度や重要度によって適切に設定するほうが現実的です。
通常、第三正規化までの作業で、大体のデータベースのテーブルが決まります。第四、第五・・・とありますが、現実的なデータベースであれば、第二、第三までの正規化を行えばよいと言われています。

主キーとは、各テーブルのレコードを一意として位置づけるものです。インデックスの役目だと考えれれば分かり易いでしょう。
例えば、氏名であれば同姓同名の方がいる場合、一意として決められません。商品名でも同じ商品名が存在する可能性が将来発生するかもしれません。そこで、顧客ID、商品IDなどという番号を各レコードに順番に割振っていると、同じ番号は将来的にも発生することはないです。
番号がインデックスに相当しますので、レコードを探すときには番号で探すと早く探せ、必ず特定したレコードが表示されることになります。
このように、テーブルには主キーとなるフィールドを設けておく必要があります。