リレーショナル データベースの設計には、データベースの正規化、または単に正規化という概念があります。これは、列 (属性) とテーブル (リレーション) を整理してデータの冗長性を減らし、データの整合性を向上させるプロセスです。ウィキペディア
1NF、2NF、3NF、および 3.5NF (Boyce-Codd BCNF) の意味についての例に基づいた説明は何ですか?
ベストアンサー1
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 に依存していることは明らかになったはずですが、TeacherID は主キーの一部ではありません。つまり、これは3NF ではありません。これを修正するには、2NF で行ったのとほぼ同じことを行います。つまり、このテーブルから TeacherName フィールドを取り出し、TeacherID をキーとする独自のテーブルに配置します。
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
冗長性なし!!
覚えておくべき重要なことは、何かが 1NF にない場合は、2NF や 3NF にも含まれないということです。したがって、追加の正規形にはそれぞれ、下位の正規形にあったすべての条件に加えて、いくつかの追加条件が必要であり、これらはすべて満たされる必要があります。