回答:
1NFは最も基本的な標準形式です。テーブルの各セルには1つの情報のみが含まれている必要があり、重複する行があってはなりません。
2NFと3NFはすべて、主キーに依存しているということです。主キーは複数の列で構成できることを思い出してください。クリスが彼の返答で言ったように:
データは、キー[1NF]、キー全体[2NF]に依存し、キー[3NF]のみに依存します(Coddを参考にしてください)。
特定の学期に受講したコースを含むテーブルがあり、次のデータがあるとします。
|-----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がENTIREキーになるように修正します。
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
冗長性なし!
では、コースの教師の名前とその詳細も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 |
冗長性なし!!
覚えておくべき重要なことの1つは、何かが1NFにない場合、2NFまたは3NFにもないということです。したがって、追加の各正規形には、下位の正規形が持つすべてのものが必要であり、さらにいくつかの追加の条件が必要です。これらはすべて満たす必要があります。
私は正確な言葉遣いのための良い記憶を持ったことがありませんが、私のデータベースクラスでは、教授は常に次のようなことを言ったと思います:
データは、キー[1NF]、キー全体[2NF]に依存し、キー[3NF]にのみ依存します。
The data depends on the key [1NF], nothing but the key [3NF]
ますか?1センテンスの回答は回答を明確にしませんが、訪問者を混乱させるので、私たちを混同しないでください!
迅速に、確かに屠殺された応答を以下に示します。
1NF:テーブルは順序付けされていないデータのセットとして編成され、繰り返し列はありません。
2NF:別の列があるため、テーブルの1つの列でデータを繰り返すことはありません。
3NF:テーブル内のすべての列は、テーブルのキーにのみ関連しています。テーブル内に、キーではない別の列を説明する列はありません。
詳細については、ウィキペディアを参照してください...
1NF:列ごとに1つの値のみ
2NF:テーブル内のすべての非主キー列は、主キー全体に依存する必要があります。
3NF:テーブル内のすべての非主キー列は、主キー全体に直接依存する必要があります。