- 締切済み
データベースでの質問です。
データベースの正規化で第一正規化、第二正規化、第三正規化 がありますが 「第一正規化」では、データの重複をなくす事をする 「第二正規化」では関数従属をおこないxの値が決まればyの値が決まるのと同じように あるキーが決まれば、他のキーも決まるようになること 「第三正規化」では関数従属をなくすと聞いたんですが、意味がわかりません 解釈としてはキー項目を2つ組み合わせてある項目を決めると解釈であってるでしょうか?? 第一正規化と第二正規化はこの解釈でいいでしょうか?? バカな質問ですいません データベースの正規化の理解に苦しんでいます 回答おねがいします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mitoneko
- ベストアンサー率58% (469/798)
まず、正確な定義を書いておきます。 「関係 (リレーション) がスカラ値のみを持ちうるとき、そのリレーションを第1正規形であるという。」 「あるリレーションが、第1正規形で、かつ、すべての非キー属性が、すべての候補キーに対して完全従属するとき、第2正規形であるという。」 「あるリレーションが、第2正規形で、かつ、非キー属性があるならば、それら全てが候補キーに非推移的に関数従属するとき、第3正規形であるという。」 となります。 まず、第1正規形では、表をフラットな形にすることを、目標とします。ここでフラットな形とは、繰り返し項目(配列)や構造体を持たないことを意味します。この段階では、キーに関する言及はありません。ただし、集合としての性質上、全てのレコードが一意に決定できる(重複がない)ことは必要です。 第2正規形では、候補キーへの「完全従属性」を求めます。これは、候補キーの一部だけが決まれば値が決まるという項目があってはいけないことを要求しています。完全従属性は、関数従属の特別な場合です。 そして、第3正規形では、「推移的な関数従属がない」ことを求めています。これは、Aが決まるとBがきまり、Bが決まるとCが決まる という関係です。つまり、Aが決まるとCが決まることになりますね。これが「推移的な」関数従属です。 例えば、「会員番号・氏名・支店コード・支店名」というテーブルを考え、会員番号を候補キーとしましょう。(つまり、会員番号は全社で一意な番号となっています。)会員番号が決まれば、氏名と所属する支店コードが特定できます。そして、支店コードが決まれば支店名が特定できます。この結果、会員番号が決まれば、推移的に支店名も特定できます。これが、推移的な関数従属です。 このテーブルが第2正規形は満たしていることに注意してください。候補キーは、会員番号のみですので、氏名・支店コード・支店名のいずれも、候補キーの一部分には関数従属していません。 さて、では、もう少し補足です。 >「第一正規化」では、データの重複をなくす事をする すこし違いますね。データの重複がないことは集合としての条件で、正規化以前の話です。 >「第二正規化」では関数従属をおこないxの値が決まればyの値が決まるのと同じように あるキーが決まれば、他のキーも決まるようになること これも、少し残念。キーの一部分で決定できる項目がないようになることが目標です。 >「第三正規化」では関数従属をなくすと聞いたんですが、意味がわかりません 意味がわかったら、ある意味大変です。関数従属がなくなったら、データベースとして形をなしません。 なくすのは、「推移的な関数従属」です。「関数従属」を無くしてしまったら、データとしてのつながりがなくなる・・・つまり、テーブルとして存在しなくなってしまいます=^・・;=。