ホームページ >データベース >mysql チュートリアル >リレーショナル データベース設計: DBMS
リレーショナル データベース設計は効果的なデータベース システムの基礎であり、冗長性を削減し、データの整合性を維持しながら、データを効率的に編成することに重点を置いています。この記事では、分解、正規化、関数の依存関係、キーについて徹底的に説明し、リレーショナル データベースの設計原則を完全に理解できるようにします。
分解とは、冗長性を排除し、一貫性を向上させ、パフォーマンスを最適化するために、大きなリレーション (テーブル) をより小さく意味のあるリレーションに分割するプロセスです。これは正規化の重要な側面です。
非可逆分解:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
これを次のように分解すると:
可逆分解:
機能依存関係 (FD) は、1 つの属性 (または属性のセット) の値が別の属性 (または属性のセット) の値を決定する関係における 2 つの属性間の関係を記述します。これは、リレーショナル データベースの設計と正規化における基本的な概念です。
X と Y をリレーション R 内の属性のセットとする。関数依存関係 X → Y は、R 内の任意の 2 つのタプル (行) について、タプルが X の値に一致する場合、 Y の値についても同意する必要があります。
学生情報を格納するテーブルを考えてみましょう:
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
ここでは、StudentID → 名前、専攻です。StudentID は名前と専攻の両方を一意に決定するためです。
キーは、テーブル内のレコードを一意に識別し、データの整合性を確保するために不可欠です。
スーパーキー:
候補キー:
主キー:
外部キー:
複合キー:
一意のキー:
正規化は、属性と関係を整理して冗長性と依存性を減らし、データの整合性を確保するプロセスです。これは、連続する正規形の基準を段階的に満たすことによって達成されます。
定義:
次の基準を満たす場合、関係は 第一正規形 (1NF) であると言われます:
説明:
例:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
定義:
次の場合、関係は 第 2 正規形 (2NF) になります:
説明:
この手順により、部分的な依存関係によって生じる冗長性が軽減され、データがより適切に整理されます。
例:
学生のコース情報を格納するテーブルを考えてみましょう:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
プライム以外の属性 (講師と部門) は部分的に複合キーに依存しているため、これは 2NF に違反します。
部分的な依存関係を削除するには、テーブルを 2 つの関係に分解します。
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
定義:
次の場合、関係は 第 3 正規形 (3NF) になります:
説明:
3NF では、冗長性を減らし、データの一貫性を向上させるために、推移的な依存関係を排除します。
例:
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
候補キー: StudentID は各行を一意に識別します。
この構造は冗長性をもたらします。CS 部門の HOD が変更されると、複数の行を更新する必要があります。
推移的な依存関係を解決するには、テーブルを 2 つの関係に分解します。
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
定義:
次の場合、関係は ボイス-コッド正規形 (BCNF) になります:
3NF と BCNF の主な違い:
説明:
BCNF は 3NF よりも厳密で、関係が 3NF を満たす可能性があるものの、BCNF に違反する依存関係によって生じる冗長性が依然として存在する状況に対処します。
BCNF が必要な場合:
例:
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
機能の依存関係:
候補キー: コースID
問題:
BCNF を実現するには、テーブルを 2 つのリレーションに分解します。
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
StudentID | CourseID | Instructor | Department ---------------------------------------------- S1 | C1 | Dr. Smith | CS S2 | C2 | Dr. Jones | EE S1 | C2 | Dr. Jones | EE
定義:
次の場合、関係は 第 4 正規形 (4NF) になります:
説明:
4NF の主な目標は、多値の依存関係を排除することです。この依存関係は、レコードに直接関係はないものの、同じキーに依存しているために一緒に表示される 2 つ以上の独立した属性が含まれている場合に発生します。
主要コンセプト:
例:
学生、学生が受講するコース、参加しているクラブに関する情報を保存するテーブルについて考えてみましょう。
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
候補キー: StudentID
複数値の依存関係:
StudentID がコースとクラブの両方を独立して決定するため、この表は 4NF に違反します。これにより、同じ StudentID がコースとクラブの異なる組み合わせで複数回繰り返されるため、冗長性が生じます。
テーブルを 4NF に準拠させるには、テーブルを 2 つのテーブルに分解して複数値の依存関係を排除する必要があります。
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
現在、2 つの複数値の依存関係は個別に処理されます。
定義:
以下の場合、関係は 第 5 正規形 (5NF) であり、射影結合正規形 (PJNF) とも呼ばれます:
説明:
5NF は 結合依存関係 を扱い、データを損失することなく、分解された部分からすべての情報を再構築できる方法でデータが分解されることを保証します。 5NF のリレーションは、その重要な結合依存関係がすべてその候補キーによって暗示されるように設計されています。
もっと簡単に言うと、5NF は不適切な分解によって生じる冗長性がないことを保証することに関係しています。これにより、リレーションが分解され、後で再び結合された場合でも、元のデータがすべて損失や曖昧さなしに利用できることが保証されます。
例:
さまざまなプロジェクトにどのサプライヤーがどの部品を供給しているかに関する情報を格納するテーブルを考えてみましょう。
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
候補キー: (サプライヤー、部品、プロジェクト)
依存関係に参加:
上記の関係は、情報を失うことなくより小さな関係に分解できるため、結合依存関係があります。たとえば、テーブルは 3 つのサブリレーションに分解できます:
EmployeeID | ProjectID | ProjectManager --------------------------------------- E1 | P1 | M1 E2 | P1 | M1
StudentID | Name | Major ---------------------------- S1 | Alice | CS S2 | Bob | EE S3 | Alice | CS
OrderID | Items ------------------- 1 | Pen, Notebook 2 | Pencil
テーブルをこれらの小さなリレーションに分解しても、これら 3 つの小さなリレーションに対して自然結合を実行して元のテーブルを再作成できます。
ただし、この分解は可能であるため、5NF に違反します。 5NF に違反する理由は、特定のプロジェクトにどのサプライヤーがどの部品を供給したかに関する情報が複数の行にまたがって冗長に保存されるためです。同じ事実を複数回保存していますが、これは不必要であり、不一致が生じる可能性があります。
5NF を達成するには、情報を失わずにリレーションをさらに分解できないようにテーブルを分解します。
OrderID | Item --------------- 1 | Pen 1 | Notebook 2 | Pencil
この形式では、データを失わずにそれ以上分解できないため、リレーションは 5NF になります。このテーブルは、元のテーブルと同じ情報を表しますが、より正規化された形式で表されており、各属性は候補キーに完全に依存しており、不適切な分解による冗長性は存在しません。
この包括的なガイドでは、リレーショナル データベース設計をマスターし、効率的で一貫性があり、異常のないデータベース システムを保証します。
以上がリレーショナル データベース設計: DBMSの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。