非正規形→第1正規形→第2正規形→第3正規形までの過程を具体例でまとめました。データベースの正規化の目的とは??データベースのデータをある一定のルールに基づいて加工(分割)していくことを正規化と言います。正規化の目的は、データの冗長性を排除し、独立性を高めることです。正規化ルールにのっとって整合性や一貫性を確保しながら分割していく必要があります。更新時異常を発生しないようにできます。正規化されていないデータを正規化していく具体例を確認していきます。非正規形まずは、以下の売上伝票を見てください。この売上伝票を1つの売上伝票テーブルで管理しようとすると、こんな感じになります。}が入っているのが分かります。このような状態を非正規形と言います。【非正規形の定義】リレーションRの属性の中に単一でない値が含まれている。非正規形のテーブルを以下のようにすると第1正規形になります。行自体が2行できていることが分かります。先ほどは{伝票番号}毎に1行(主キーが伝票番号)でしたが、{伝票番号、商品コード}毎に1行(主キーが伝票番号、商品コードの組み合わせ)になりました。【第1正規形の定義】リレーションRの全ての属性が単一値である。候補キーと関数従属性について押さえておく必要があります。必要であればご覧ください。【第2正規形の定義】リレーションRが次の二つの条件を満たす。1第1正規形であること2全ての非キー属性は、いかなる候補キーにも部分関数従属していない(完全関数従属である)こと文章だと2はさっぱりですね。具体的に見ていきましょう。部分関数従属と候補キー、非キー属性について以下の絵を見てください。商品IDが決まれば商品名が決まります。これが部分関数従属です。数量は候補キー{伝票番号、商品ID}に完全関数従属します。部分関数従属がない状態にすると第2正規形です。先ほどの第1正規形のテーブルを部分関数従属がないように第2正規形にすると、最終的にこんな感じになります。最後に、第3正規形です。【第3正規形の定義】リレーションRが次の二つの条件を満たす。1第2正規形であること2全ての非キー属性は、いかなる候補キーにも推移的関数従属していないそれでは、推移的関数従属について具体例で見てみましょう。伝票番号(候補キー)→店舗ID(非キー属性)→店舗名(非キー属性)と推移的に関数従属している状態をなくすと第3正規形になります。以下のような場合は推移的関数従属ではありません。上の図の例だと、店舗IDが店舗名に関数従属する例です。(必ず店舗名が一意になるような場合)その場合、店舗名が候補キーになるため推移的関数従属にはなりません。先ほどの第2正規形のテーブルを第3正規形にするとこんな感じになります。非正規形のテーブルを第3正規形まで正規化する手順を具体例でまとめました。自分で手を動かして非正規化のところから正規化する練習を実際にしてみるのがオススメです。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。