MySQL データベース設計 3 つのパラダイム例分析

MySQL データベース設計 3 つのパラダイム例分析

3つのパラダイム

1NF: フィールドは分離不可能です。

2NF: 主キーがあり、非主キー フィールドは主キーに依存します。

3NF: 主キー以外のフィールドは相互に依存できません。

説明する:

1NF: アトミック フィールドをこれ以上分割することはできません。分割できない場合はリレーショナル データベースではありません。

2NF: 一意性 テーブルは 1 つの事柄のみを記述します。

3NF: 各列は主キーと直接関係しており、推移的な依存関係はありません。

第一正規形 (1NF)

つまり、テーブルの列はアトミックであり、それ以上分解できません。つまり、列内の情報は分解できません。データベースがリレーショナル データベース (mysql/oracle/db2/informix/sysbase/sql server) である限り、自動的に 1NF を満たします。データベース テーブル内の各列は分割できないアトミック データ項目であり、コレクション、配列、レコードなどの非アトミック データ項目にすることはできません。エンティティ内の属性に複数の値がある場合は、それを異なる属性に分割する必要があります。簡単に言えば、フィールドには 1 つの情報のみが保存されます。

リレーショナル データベース: mysql/oracle/db2/informix/sysbase/sql server 非リレーショナル データベース: (機能: オブジェクト指向またはコレクション指向) NoSql データベース: MongoDB/redis (機能: ドキュメント指向)

第2正規形 (2NF)

第 2 正規形 (2NF) は第 1 正規形 (1NF) に基づいて構築されます。つまり、第 2 正規形 (2NF) を満たすには、まず第 1 正規形 (1NF) を満たす必要があります。第 2 正規形 (2NF) では、データベース テーブル内の各インスタンスまたは行が一意に区別可能である必要があります。この区別を実現するには、通常、それを実現する主キーを設計する必要があります (ここでの主キーにはビジネス ロジックは含まれません)。

つまり、最初のパラダイムの前提は満たされます。主キーが複数ある場合は、2 番目のパラダイムに準拠しません。たとえば、主キーが 2 つある場合、主キーの 1 つだけに依存する属性は存在できません。これは第 2 正規形に準拠していません。一般的な理解としては、どのフィールドもテーブル内の同じフィールドにのみ依存します。 (テーブル分割を含む)

以下の学生コース選択表をご覧ください。

学生証コーススコアコースの単位
10001数学100 6
10001言語90 2
10001英語85 3
10002数学90 6
10003数学99 6
10004言語89 2

テーブルの主キーは (学生番号、コース) であり、これは (学生番号、コース) -> (成績、コース単位) と表現でき、すべての非主キー列 (成績、コース単位) が主キー (学生番号、コース) に依存していることを示します。 ただし、表には別の依存関係があります: (コース) -> (コース クレジット)。このように、非主キー列「Course Credits」は部分主キー列「Course」に依存するため、上記の表は第 2 正規形を満たしません。

これを次の 2 つのテーブルに分割します。

学生コース選択表:

学生証コーススコア
10001数学100
10001言語90
10001英語85
10002数学90
10003数学99
10004言語89

コース情報シート:

コースコースの単位
数学6
言語3
英語2

上記 2 つのテーブルでは、学生コース選択テーブルの主キーは (学生番号、コース) であり、コース情報テーブルの主キーは (コース) です。テーブル内の主キー以外の列はすべて、主キーに完全に依存しています。これは、2 番目のパラダイムに準拠しているだけでなく、3 番目のパラダイムにも準拠しています。

この学生情報シートを見てみましょう:

学生証名前性別クラス校長
10001張三クラス1シャオ・ワン
10002李思クラス1シャオ・ワン
10003王武クラス2シャオ・リー
10004張暁三クラス2シャオ・リー

上記の表では、主キーは (生徒番号) であり、すべてのフィールド (名前、性別、クラス、主任教師) は主キー (生徒番号) に依存しており、主キーに部分的な依存関係はありません。したがって、これは第 2 正規形を満たします。

第3正規形 (3NF)

第 3 正規形 (3NF) を満たすには、まず第 2 正規形 (2NF) を満たす必要があります。つまり、第 3 正規形 (3NF) では、データベース テーブルに、他のテーブルにすでに含まれている非主キー フィールドが含まれていないことが求められます。つまり、テーブルの情報が推測できる場合は、それを保存するための別のフィールドを設計しないでください (可能な場合は外部キー結合を使用します)。多くの場合、第 3 正規形を満たすために、テーブルを複数のテーブルに分割することがよくあります。

つまり、第 2 正規形の前提を満たしています。属性が他の非主キー属性に依存し、他の非主キー属性が主キーに依存している場合、この属性は間接的に主キーに依存しており、これを主属性への推移的依存と呼びます。 簡単に説明すると、テーブルには同じ種類の情報を最大 2 つのレイヤーしか保存できないということです。

反3パラダイム

冗長性のないデータベースが必ずしも最良のデータベースであるとは限りません。運用効率や読み取りパフォーマンスを向上させるために、パラダイム基準を下げて冗長データを適切に保持する必要がある場合もあります。具体的なアプローチとしては、概念データ モデルを設計する際には第 3 正規形に準拠し、物理データ モデルを設計する際にはパラダイム標準を下げることを検討します。パラダイムを下げるということは、フィールドを追加し、クエリ中の関連付けを減らし、クエリの効率を向上させることを意味します。これは、データベース操作におけるクエリの割合が DML の割合よりもはるかに大きいためです。ただし、脱パラダイム化は適度に行う必要があり、3 つのパラダイムの元々の満足度に基づいて調整を行う必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL シリーズ データベース設計 3 つのパラダイム チュートリアルの例
  • MySQLデータベースパラダイムの詳細な説明
  • MySQL データベースのデータ テーブルの最適化、外部キーの分析、3 つのパラダイムの使用
  • MySQLデータベース正規化設計理論のまとめ

<<:  各 Nginx プロセスで開くことができるファイルの最大数を設定する方法

>>:  el-table のテーブルを最適化するために仮想リストを使用する方法についての簡単な説明

推薦する

JavaScript の async と await のシンプルで詳細な学習

目次1. はじめに2. 詳しい説明2.1、非同期2.1.1. 関数はPromise以外のオブジェクト...

ブロックレベル要素、インライン要素、可変要素の概要

ブロック要素p - 段落テキストの事前フォーマットテーブルol - ソートフォームul - 順序なし...

MySQL テーブルタイプ ストレージエンジンの選択

目次1. 現在のデータベース支出のストレージエンジンを表示する方法1:方法2: 2. ENGINE=...

MySQL レプリケーションの詳細な説明と簡単な例

MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...

Linux で CPU 使用率が高くなる原因をトラブルシューティングするプロセスの詳細な説明

目次序文始めるステップトラブルシューティング序文CPU 使用率が高くなるのは、オンラインでよくある問...

ユニアプリプロジェクトでのウォーターフォールレイアウトの実装

GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアル1. プ...

簡潔なReactコンポーネントを書くためのヒント

目次スプレッド演算子を使用してプロパティを渡すのは避けてください関数パラメータをオブジェクトにカプセ...

フォーム検証機能を実装するためのネイティブ js

目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...

nginx 設定場所方法の概要

位置一致順序1. 「=」プレフィックス命令マッチング、マッチングが成功したら他のマッチングを停止2....

img タグの src 属性値が空の場合の 2 つのリクエストの問題 (IE 以外のブラウザ)

img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...

MySQL における count(*)、count(1)、count(col) の違いのまとめ

序文count 関数は、テーブルまたは配列内のレコードをカウントするために使用されます。count(...

C# は MySQL コマンドラインのバックアップとリカバリを実装します

MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...

docker-maven-pluginプラグインは対応するjarパッケージを取得できません

docker-maven-plugin プラグインを使用する場合、Maven は対応する jar パ...

MySQL で遅いクエリ SQL を見つけて最適化する詳細な例

目次1. 遅いクエリSQLを見つけて最適化する方法a. スローログに基づいてスロークエリSQLを見つ...

Mysql5.7.14 インストールと設定方法操作グラフィックチュートリアル(パスワード問題解決)

この記事は主に、以前のインストール方法を使用して MySQL 5.7.14 をインストールするときに...