検索
ホームページデータベースmysql チュートリアルデータベース設計における正規形の理解: 包括的なガイド

Understanding Normal Forms in Database Design: A Comprehensive Guide

データベース設計におけるさまざまな正規形

データベース設計における 正規化 は、データを整理して冗長性と依存性を最小限に抑え、データの整合性を向上させるプロセスです。このプロセスには、大きなテーブルを管理しやすい小さなテーブルに分割し、テーブル間の関係を確立することが含まれます。これにより、データベースに挿入、更新、削除の異常がないことが保証されます。

さまざまな 正規形式 は、特定のレベルの正規化を表します。各正規形は前の正規形に基づいて構築されており、独自のルールのセットがあります。以下は最も一般的な正規形の説明です:


1.第一正規形 (1NF)

1NF は、重複データを排除し、各列にアトミック値 (繰り返しグループがない) が含まれるようにテーブル内のデータが編成されるようにすることに重点を置いた、最も基本的なレベルの正規化です。

  • 1NF のルール:
    1. 表の各セルには単一の値 (原子性) が含まれている必要があります。
    2. 各レコード (行) は一意である必要があります。
    3. 各列には、単一タイプの値 (例: すべての整数、すべての文字列) が含まれている必要があります。
    4. 列のグループを繰り返したり、1 つの列に複数の値を入れたりすることはできません。

1NF の例:

1NF より前:

OrderID Products Quantities
1 Apple, Banana 2, 3
2 Orange 5

1NF に変換した後:

OrderID Product Quantity
1 Apple 2
1 Banana 3
2 Orange 5

2.第 2 正規形 (2NF)

2NF は、部分的な依存関係 を削除することにより、1NF に基づいて構築されます。部分依存関係は、非主属性 (主キーの一部ではない列) が主キーの一部のみに依存している場合 (複合主キーの場合) に発生します。 2NF を達成するには、テーブルがまず 1NF の要件を満たしている必要があります。

  • 2NF のルール:
    1. テーブルは 1NF にある必要があります。
    2. すべての非主属性は、主キー全体に完全に機能的に依存する必要があります (部分的な依存関係を排除します)。

2NF の例:

2NF より前 (部分的な依存関係):

OrderID Product CustomerName Price
1 Apple John 10
1 Banana John 5
2 Orange Jane 8

ここで、CustomerName は、完全な主キー (OrderID、Product) ではなく、OrderID のみに依存します。これを削除するために、テーブルを分割しました。

2NF以降:
テーブル:

  • 注文 (注文ID、顧客名)
  • 注文詳細 (注文ID、製品、価格)

注文テーブル:

OrderID CustomerName
1 John
2 Jane

OrderDetails テーブル:

OrderID Product Price
1 Apple 10
1 Banana 5
2 Orange 8

3.第 3 正規形 (3NF)

3NF2NF に基づいて構築され、非プライム属性が別の非プライム属性に依存するときに発生する 推移的な依存関係 に対処します。非主属性は主キーのみに依存する必要があります。テーブルが 2NF にあり、すべての推移的な依存関係が削除されている場合、テーブルは 3NF にあります。

  • 3NF のルール:
    1. テーブルは 2NF にある必要があります。
    2. 非プライム属性は別の非プライム属性に依存すべきではありません (推移的な依存関係を削除します)。

3NF の例:

3NF (推移的依存関係) より前:

OrderID Product Category Supplier
1 Apple Fruit XYZ
2 Carrot Vegetable ABC

ここで、サプライヤーは、OrderIDに直接依存するのではなく、カテゴリに依存します。これを解決するために、テーブルを分割しました。

3NF以降:
テーブル:

  • 注文 (OrderID、製品、カテゴリ)
  • カテゴリ (カテゴリ、サプライヤー)

注文テーブル:

OrderID Product Category
1 Apple Fruit
2 Carrot Vegetable

カテゴリ表:

Category Supplier
Fruit XYZ
Vegetable ABC

4.ボイス・コッド正規形 (BCNF)

BCNF は、3NF のより厳密なバージョンです。次の場合、テーブルは BCNF にあります:

  • 3NFにあります。
  • すべての関数の依存関係について、左側は 候補キー (つまり、最小限のスーパーキー) でなければなりません。

もっと簡単に言うと、BCNF は、テーブルが 3NF にあるものの、候補キーではない属性に関係する依存関係がまだあるという状況に対処します。

  • BCNF のルール:
    1. テーブルは 3NF にある必要があります。
    2. すべての行列式は候補キーでなければなりません。

BCNF の例:

BCNF の前:

CourseID Instructor Room
101 Dr. Smith A1
102 Dr. Smith B1
101 Dr. Johnson A2

ここでは、インストラクター部屋 を決定しますが、インストラクター は候補キーではないため、BCNF に違反します。 BCNF を実現するには、依存関係を異なるテーブルに分割します。

BCNF 後:
テーブル:

  • コース (コースID、講師)
  • 部屋(インストラクター、部屋)

コース表:

CourseID Instructor
101 Dr. Smith
102 Dr. Smith
101 Dr. Johnson

部屋のテーブル:

Instructor Room
Dr. Smith A1
Dr. Smith B1
Dr. Johnson A2

5.第 4 正規形 (4NF)

4NF は、ある属性が別の属性の複数の値を決定し、それらの値が互いに独立している場合に発生する 複数値の依存関係 に対処します。次の場合、テーブルは 4NF にあります:

  • BCNFにあります。
  • 複数値の依存関係はありません。

4NF の例:

4NF (多値依存関係) より前:

StudentID Subject Hobby
1 Math Painting
1 Science Cycling

4NF以降:
テーブル:

  • 学生 (StudentID、件名)
  • 学生の趣味 (学生ID、趣味)

学生テーブル:

StudentID Subject
1 Math
1 Science

学生の趣味テーブル:

StudentID Hobby
1 Painting
1 Cycling

結論

データベース設計において、正規化はデータを効率的に整理するための基本的なプロセスです。さまざまな正規形式 (1NF、2NF、3NF、BCNF、4NF) により、データが冗長性なく保存され、整合性が維持され、管理が容易になります。それぞれの正規形は、特定の種類の依存関係や異常を排除することによって、前の正規形に基づいて構築されます。正規化によりデータ品質は向上しますが、パフォーマンスに関する考慮事項とのバランスをとることが重要であり、最適化に必要な場合には非正規化を選択することもあります。

こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。

以上がデータベース設計における正規形の理解: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
DockerでのMySQLメモリの使用を減らしますDockerでのMySQLメモリの使用を減らしますMar 04, 2025 pm 03:52 PM

この記事では、DockerのMySQLメモリ使用量を最適化することを調査します。 監視手法(Docker統計、パフォーマンススキーマ、外部ツール)および構成戦略について説明します。 これらには、Dockerメモリの制限、スワッピング、およびcgroupsが含まれます

mysqlの問題を解決する方法共有ライブラリを開くことができませんmysqlの問題を解決する方法共有ライブラリを開くことができませんMar 04, 2025 pm 04:01 PM

この記事では、MySQLの「共有ライブラリを開くことができない」エラーについて説明します。 この問題は、必要な共有ライブラリ(.so/.dllファイル)を見つけることができないMySQLの障害に起因しています。ソリューションには、システムのパッケージMを介してライブラリのインストールを確認することが含まれます。

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)Mar 04, 2025 pm 03:54 PM

この記事では、PHPMyAdminの有無にかかわらず、LinuxにMySQLを直接インストールするのとPodmanコンテナを使用します。 それは、各方法のインストール手順を詳述し、孤立、携帯性、再現性におけるポッドマンの利点を強調しますが、

sqliteとは何ですか?包括的な概要sqliteとは何ですか?包括的な概要Mar 04, 2025 pm 03:55 PM

この記事では、自己完結型のサーバーレスリレーショナルデータベースであるSQLiteの包括的な概要を説明します。 SQLiteの利点(シンプルさ、移植性、使いやすさ)と短所(同時性の制限、スケーラビリティの課題)を詳しく説明しています。 c

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイドMACOSで複数のMySQLバージョンを実行する:ステップバイステップガイドMar 04, 2025 pm 03:49 PM

このガイドは、HomeBrewを使用してMacOSに複数のMySQLバージョンをインストールおよび管理することを示しています。 Homebrewを使用して設置を分離し、紛争を防ぐことを強調しています。 この記事では、インストール、開始/停止サービス、および最高のPRAを詳述しています

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?Mar 18, 2025 pm 12:01 PM

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。