DBMS 正規化: 1NF、2NF、3NF データベースの例
データベースの正規化とは何ですか?
正規化 は、データの冗長性を削減し、挿入、更新、削除の異常などの望ましくない特性を排除するデータベース設計手法です。正規化ルールは、大きなテーブルを小さなテーブルに分割し、関係を使用してそれらをリンクします。 SQL の正規化の目的は、冗長 (反復) データを排除し、データが論理的に格納されるようにすることです。
の発明者 関係モデル Edgar Codd は、第 1 正規形を導入してデータの正規化理論を提案し、第 2 正規形と第 3 正規形を使用して理論を拡張し続けました。 Later 彼はレイモンド F. ボイスに加わり、ボイス-コッド正規形の理論を開発しました。
DBMS の正規形の種類
SQL の正規形のリストは次のとおりです。
- 1NF (第一正規形): 各列にアトミック (分割できない) 値が含まれ、各レコードが一意になるようにデータベース テーブルが構成されていることを確認します。これにより、繰り返しグループが排除され、データがテーブルと列に構造化されます。
- 2NF (第 XNUMX 正規形): 1NF をベースに構築 複数の行に適用されているテーブルから冗長なデータを削除する必要があります。それらを別のテーブルに配置します。すべての非キー属性が主キー上で完全に機能する必要があります。
- 3NF (第 XNUMX 正規形): すべての非キー属性が主キー上で完全に機能するだけでなく、互いに独立していることを保証することで 2NF を拡張します。これにより、推移的な依存関係が排除されます。
- BCNF (ボイス・コッド正規形): 3NF で処理できない異常に対処する 3NF の改良版。すべての行列式が候補キーである必要があり、正規化ルールをさらに厳密に遵守することが保証されます。
- 4NF (第 XNUMX 正規形): 複数値の依存関係に対処します。これにより、レコード内のエンティティに関する複数の独立した多値ファクトが存在しないことが保証されます。
- 5NF (第 XNUMX 正規形): 「射影結合正規形式」(PJNF) としても知られるこれは、より小さな、異なる配置のデータ部分からの情報の再構成に関係します。
- 6NF (第 XNUMX 正規形): 理論上のものであり、広く実装されていません。テーブルをさらに分解して非時間的な冗長性をすべて排除することで、時間データを処理します (時間の経過に伴う変化を処理します)。
データ正規化の理論 MySQL サーバーはまだ開発中です。例えば6についても議論があります。th ノーマルフォーム。 ただし、ほとんどの実際のアプリケーションでは、正規化は 3 つの条件で最高のパフォーマンスを発揮します。rd 通常の形式。 SQL 理論における正規化の進化を以下に示します。
データベースの正規化と例
データベース 正規化の例 ケーススタディを使えば簡単に理解できます。 ビデオ ライブラリが、レンタルされた映画のデータベースを管理していると仮定します。 データベースで正規化を行わないと、以下に示すように、すべての情報が XNUMX つのテーブルに保存されます。 正規化の例とソリューションを使用して正規化データベースを理解しましょう。
ご覧のとおり レンタルした映画列には複数の値があります。 次に、第 1 正規形に移りましょう。
第一正規形(1NF)
- テーブルの各セルには単一の値が含まれている必要があります。
- 各レコードは一意である必要があります。
1NF-の上表
1NFの例
先に進む前に、いくつかのことを理解しましょう —
SQLのキーとは何ですか
A SQLのキー テーブル内のレコードを一意に識別するために使用される値です。 SQL KEY は、テーブル内の行またはタプルを一意に識別するために使用される単一の列、または複数の列の組み合わせです。 SQL キーは重複した情報を識別するために使用され、データベース内の複数のテーブル間の関係を確立するのにも役立ちます。
注: レコードを一意に識別するために使用されないテーブル内の列は、非キー列と呼ばれます。
主キーとは
プライマリは、データベース レコードを一意に識別するために使用される単一の列の値です。
以下の属性があります
- A 主キー NULLにすることはできません
- 主キーの値は一意である必要があります
- 主キーの値はほとんど変更しないでください。
- 新しいレコードを挿入するときは、主キーに値を指定する必要があります。
複合キーとは何ですか?
複合キーは、レコードを一意に識別するために使用される複数の列で構成される主キーです。
私たちのデータベースには、Robert Phil という同じ名前の XNUMX 人の人物がいますが、それぞれ別の場所に住んでいます。
したがって、レコードを一意に識別するにはフルネームとアドレスの両方が必要です。 それが複合キーです。
第 2 正規形 XNUMXNF に移りましょう
第2正規形(XNUMXNF)
- ルール 1 - 1NF にいること
- ルール2 - 候補キー関係のどのサブセットにも機能的に依存しない単一列主キー
単純なデータベースを 2 で作成することは不可能であることは明らかです。nd 上記のテーブルを分割しない限り、正規化形式になります。
1NF テーブルをテーブル 1 とテーブル 2 の 1 つのテーブルに分割しました。テーブル 2 にはメンバー情報が含まれています。テーブル XNUMX にはレンタルされた映画に関する情報が含まれています。
テーブル 1 の主キーである Membership_id という新しい列を導入しました。メンバーシップ ID を使用して、テーブル 1 内のレコードを一意に識別できます。
データベース–外部キー
表 2 では、Membership_ID は外部キーです。
外部キーは別のテーブルの主キーを参照しています。 テーブルを接続するのに役立ちます
- 外部キーには主キーとは異なる名前を付けることができます
- あるテーブルの行が別のテーブルにも対応する行を持つことを保証します。
- 主キーとは異なり、一意である必要はありません。 ほとんどの場合、そうではありません
- 主キーは null にできませんが、外部キーは null にできます。
なぜ外部キーが必要なのでしょうか?
初心者がテーブル B に次のようなレコードを挿入するとします。
親テーブルの一意キーに存在する値のみを外部キーに挿入できます。 これは参照整合性に役立ちます。
上記の問題は、Table2 のメンバーシップ ID を Table1 のメンバーシップ ID の外部キーとして宣言することで解決できます。
ここで、誰かが親テーブルに存在しない値をメンバーシップ ID フィールドに挿入しようとすると、エラーが表示されます。
推移的な機能依存性とは何ですか?
他動詞 関数従属性 非キー列を変更すると、他の非キー列が変更される可能性があります
表 1 を考えてみましょう。非キー列のフルネームを変更すると、挨拶文が変わる可能性があります。
3NFに移りましょう
第3正規形(XNUMXNF)
- ルール 1 - 2NF にいること
- ルール 2 - 推移的な関数の依存関係がない
2NF テーブルを 3NF に移動するには、テーブルを再度分割する必要があります。
3NFの例
以下は SQL データベースの 3NF の例です。
再びテーブルを分割し、挨拶を保存する新しいテーブルを作成しました。
推移的な関数の依存関係がないため、テーブルは 3NF になります。
表 3 では、挨拶 ID は主キーであり、表 1 では、挨拶 ID は表 3 の主キーの外部です。
現在、この小さな例は、DBMS でより高次の正規化形式を達成するためにこれ以上分解できないレベルにあります。実際、すでにより高次の正規化形式になっています。複雑なデータベースでは、通常、データの正規化の次のレベルに進むための別の作業が必要です。ただし、以下では DBMS での正規化の次のレベルについて簡単に説明します。
ボイスコッド正規形(BCNF)
データベースが3の場合でもrd 正規形でも、複数ある場合は異常が発生します。 候補者 キー。
BCNF は、次のように呼ばれることもあります。 3.5 標準形式。
第4正規形(XNUMXNF)
関連するエンティティを記述する 4 つ以上の独立した多値データがデータベース テーブル インスタンスに含まれていない場合、それは XNUMX になります。th ノーマルフォーム。
5番目の通常の形式(XNUMXNF)
テーブルは5つにありますth 標準形式は、4NF にあり、データを失わずに任意の数の小さなテーブルに分解できない場合にのみ使用されます。
第 6 正規形 (XNUMXNF) の提案
6th 標準形式はまだ標準化されていませんが、データベースの専門家によってしばらくの間議論されています。 うまくいけば、6 について明確で標準化された定義が得られると思います。th 近い将来の通常形態…
正規形の利点
- データの一貫性を向上させる: 正規化により、各データが 1 か所のみに保存されるようになり、データの不整合が発生する可能性が減ります。データを更新する場合、1 か所で更新するだけで済むため、一貫性が確保されます。
- データの冗長性を削減します。 正規化は、データを複数の関連テーブルに分割することで重複データを排除するのに役立ちます。これにより、ストレージ スペースが節約され、データベースの効率も向上します。
- クエリのパフォーマンスを向上させる: 多くの場合、正規化されたデータベースはクエリが容易です。データは論理的に編成されているため、クエリを最適化してより高速に実行できます。
- データをより意味のあるものに: 正規化には、意味があり直感的な方法でデータをグループ化することが含まれます。これにより、特にデータベースを設計したことがない人にとって、データベースが理解しやすくなり、使いやすくなります。
- 異常の可能性を減らす: 異常とは、データの追加、更新、削除時に発生する可能性のある問題です。正規化により、データが論理的に整理されるため、これらの異常の可能性を減らすことができます。
正規化のデメリット
- 複雑さの増加: 正規化により関係が複雑になる可能性があります。外部キーを持つテーブルが多数あると管理が難しくなり、混乱を招く可能性があります。
- 柔軟性の低下: 正規化の厳格なルールにより、これらのルールに従わないデータを保存する際の柔軟性が低下する可能性があります。
- ストレージ要件の増加: 正規化により冗長性が減少しますが、追加のテーブルとインデックスに対応するために、より多くのストレージ領域を割り当てる必要がある場合があります。
- パフォーマンスのオーバーヘッド: 複数のテーブルを結合すると、パフォーマンスの面でコストがかかる可能性があります。データがより正規化されると、より多くの結合が必要になり、データの取得時間が遅くなる可能性があります。
- データコンテキストの損失: 正規化ではデータが別々のテーブルに分割されるため、ビジネス コンテキストの損失につながる可能性があります。データのコンテキストを理解するには、関連するテーブルを調べることが必要です。
- 専門知識の必要性: 正規化されたデータベースを実装するには、データ、データ間の関係、および正規化ルールを深く理解する必要があります。これには専門知識が必要であり、時間がかかる場合があります。
SQL の正規化については以上です。
まとめ
- データベース設計 エンタープライズ システムのデータ要件を満たすデータベース管理システムの導入を成功させるには、これが不可欠です。
- DBMS の正規化は、コスト効率が高く、より優れたセキュリティ モデルを備えたデータベース システムを作成するのに役立つプロセスです。
- 関数の依存関係は、データの正規化プロセスの非常に重要なコンポーネントです。
- ほとんどのデータベース システムは、DBMS の第 XNUMX 正規形まで正規化されたデータベースです。
- 主キーはテーブル内のレコードを一意に識別するものであり、null にすることはできません
- 外部キーはテーブルの接続に役立ち、主キーを参照します