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 のテーブルを最適化するために仮想リストを使用する方法についての簡単な説明

推薦する

ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

ページコンテンツ全体を中央に配置する方法と、コンテンツに合わせて高さを自動的に拡大縮小する方法。これ...

Ubuntu システムでタイムゾーンと時刻を変更する方法

Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...

CSS スクロールバースタイル変更コード

CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

MySQL 外部キー制約 (FOREIGN KEY) ケースの説明

MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約...

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

TypeScriptにおけるunknownとanyの違いについて詳しく説明します

目次序文1. 不明 vs 任意2. 未知とあらゆるもののメンタルモデル3. まとめ要約する序文any...

互換性を維持しながら他のウェブページのデータを適用する iframe の使い方

以下は、Shiji Tiancheng が Tencent KartRider ページを呼び出すため...

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

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

Vue が Bibibili のホームページを模倣する際の問題

エンジニアリング構造プロジェクトは2つの部分に分かれています。bilibili-apiはAPIインタ...

Ubuntuサーバーの一般的なコマンドの概要

以下のコマンドのほとんどは、コンソール/ターミナル/シェルで入力する必要があります。 'su...

dockerでopenGaussデータベースを構成する方法の詳細な説明

Windowsユーザー向けDocker で openGauss を使用するopenGaussイメージ...

Web ページのスクロール バーが右側に設定されているのはなぜですか?

私たちが毎日使っているブラウザや Word 文書のスクロール バーはなぜ右側にあるのでしょうか。多く...

Vueはリストのシームレスなスクロールを実装します

この記事の例では、リストのシームレスなスクロールを実現するためのvueの具体的なコードを参考までに共...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...