違いについて書いていこうと思います。注意この記事ではテーブルを見やすくするために、1つのテーブルを分割して表示している場合があります。そのテーブルは右端と左端が同じ色になってますので、そのようなテーブルは繋がっていると思って読んでください。例として使う非正規形テーブルは下図になります。皆さんなじみがあると思いますので、コンビニのレシートを例にしたテーブルとなっています。非正規形とは、繰り返し項目を含むテーブルのことです。OracleなどのRDBで繰り返し項目を含むテーブルを作ることは不可能なので、基本的にテーブルは第一正規化された状態から始まると思ってください。非正規形から繰り返し項目を排除した形になります。全ての非キー属性はどんな候補キーにも部分関数従属していないことが条件となります。条件の1つ目の「第一正規形である」ということは「繰り返し項目を排除する」ことというのはもうお分かりですよね?条件の2つ目の「全ての非キー属性はどんな候補キーにも部分関数従属していない」ことについては例を挙げて説明します。候補キーとは?候補キーとは、その項目が決まれば他の項目が一意に定まる項目の組合せのことです。第一正規化のときのテーブルを例にすると、{レシート番号,商品コード}の組合せが候補キーとなります。候補キーは複数の組み合わせでなければいけないといったことはなく、1つの項目が決まれば他の項目も一意に定まる場合、候補キーは1つになります。部分関数従属とは?部分関数従属とは、候補キーの一部だけで他の項目が一意に定まる場合のことを指します。第一正規化のときのテーブルを例にすると、{レシート番号,商品コード}の組合せで他の項目が一意に定まりますが、候補キーの一部である{レシート番号}だけでも{店舗ID,店舗名,住所,合計,消費税,請求額,日時,担当者コード,担当者名}が一意に定まります。候補キーが1つの場合は部分関数従属はしていないので条件の2つ目は自動的にクリアしていることになります。したがって、2つ目の条件を満たすためにテーブルを分割する必要があります。分割後のテーブルは下図のようになります。全ての非キー属性はどんな候補キーにも推移的関数従属していないことが条件となります。条件の1つ目の「第二正規形である」ということは前述したとおりです。条件の2つ目の「全ての非キー属性はどんな候補キーにも推移的関数従属していない」ことについては例を挙げて説明します。よって非キー項目が一意に定まることを指します。第二正規化のときのテーブルを例にすると、非キー属性の{店舗ID}が決まると{店舗名,住所}が一意に定まります。していると言うことができます。したがって、2つ目の条件を満たすためにはテーブルを分割する必要があります。一般的に第三正規化をする場合には導出項目を排除しますので、第三正規化されたテーブルは下図のようになります。導出項目とは?導出項目とは、計算することによって求めることができる項目のことを指します。第二正規化のときのテーブルを例にすると、{小計,合計,消費税,請求額}が対象になります。これで第三正規化の完成です!まとめいかがでしたでしょうか。私自身忘れてしまうことがあるため今回この記事を書かせてもらいました。請求額}の3つの属性もこのテーブルに入るべきだと思います。請求額}この3つの属性がこのテーブルに入ってはならないのですか?もし、後者の場合、なぜ入ってはならないのですか、その理由も聞かせてほしいですが。PM便宜のために省略したわけでも、入ってはならないわけでもありません。一般的に、第三正規化する際には導出項目(ほかの項目から計算して出せる項目)は排除するためです。コメントをキャンセルメールアドレスが公開されることはありません。[SQL]RECOMMENDこちらの記事も人気です。