1. ホーム
  2. データベース

[解決済み】データベースの正規形とは何ですか、またその例を教えてください。[クローズド]

2022-04-16 22:36:09

質問

リレーショナルデータベースの設計では、データベースの正規化、または単に正規化という概念があり、カラム(属性)とテーブル(関係)を整理してデータの冗長性を減らし、データの整合性を向上させる作業である。(↓に書いてあります ウィキペディア ).

1NF、2NF、3NF、さらには3.5NF(Boyce-Codd)の意味について、例題をもとにしたわかりやすい解説を書いてほしい。

どのように解決するのですか?

1NFは最も基本的な正規形です。表の各セルは1つの情報しか含まず、行の重複は許されません。

2NFと3NFは、主キーに依存することがすべてである。主キーは複数のカラムで構成できることを思い出してください。Chrisが回答で言っているように

データはキー[1NF]、キー全体[2NF]、キー以外[3NF]に依存している(だから、助けてくれ コッド ).

2NF

ある学期に履修した科目を含むテーブルがあり、次のようなデータがあったとします。

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

これは 2NFでない というのは、4番目のカラムは 全体 キーの一部だけです。コース名はコースのIDに依存しますが、どの学期に受講するかには関係ありません。このように、IT101はプログラミング、IT102はデータベースというように、重複した情報を持っているのです。そこで、コース名を別のテーブルに移動し、CourseIDを完全なキーとすることで、これを解決します。

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

冗長性なし!

3NF

では、講座の先生の名前とその詳細もRDBMSに追加するとしましょう。

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

さて、TeacherName が TeacherID に依存していることが明らかであることを期待します。 3NFでない . この問題を解決するには、2NFで行ったのと同じように、このテーブルからTeacherNameフィールドを取り出し、TeacherIDをキーとする独自のテーブルを作成します。

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

冗長性はない!

重要なことは、1NFにないものは、2NFにも3NFにもないということです。ですから、それぞれの追加正規形には すべて が持っている条件に加えて、さらにいくつかの追加条件が必要です。 すべて を満たす必要があります。