[解決済み】データベースの正規形とは何ですか、またその例を教えてください。[クローズド]
質問
リレーショナルデータベースの設計では、データベースの正規化、または単に正規化という概念があり、カラム(属性)とテーブル(関係)を整理してデータの冗長性を減らし、データの整合性を向上させる作業である。(↓に書いてあります ウィキペディア ).
1NF、2NF、3NF、さらには3.5NF(Boyce-Codd)の意味について、例題をもとにしたわかりやすい解説を書いてほしい。
どのように解決するのですか?
1NFは最も基本的な正規形です。表の各セルは1つの情報しか含まず、行の重複は許されません。
2NFと3NFは、主キーに依存することがすべてである。主キーは複数のカラムで構成できることを思い出してください。Chrisが回答で言っているように
データはキー[1NF]、キー全体[2NF]、キー以外[3NF]に依存している(だから、助けてくれ コッド ).
2NF
ある学期に履修した科目を含むテーブルがあり、次のようなデータがあったとします。
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
これは 2NFでない というのは、4番目のカラムは 全体 キーの一部だけです。コース名はコースのIDに依存しますが、どの学期に受講するかには関係ありません。このように、IT101はプログラミング、IT102はデータベースというように、重複した情報を持っているのです。そこで、コース名を別のテーブルに移動し、CourseIDを完全なキーとすることで、これを解決します。
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
冗長性なし!
3NF
では、講座の先生の名前とその詳細もRDBMSに追加するとしましょう。
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
さて、TeacherName が TeacherID に依存していることが明らかであることを期待します。 3NFでない . この問題を解決するには、2NFで行ったのと同じように、このテーブルからTeacherNameフィールドを取り出し、TeacherIDをキーとする独自のテーブルを作成します。
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
冗長性はない!
重要なことは、1NFにないものは、2NFにも3NFにもないということです。ですから、それぞれの追加正規形には すべて が持っている条件に加えて、さらにいくつかの追加条件が必要です。 すべて を満たす必要があります。
関連
-
[解決済み] データベースの記号は何を表しているのですか?
-
[解決済み] mongodb 4 データディレクトリ C:\data_dbdb not found
-
[解決済み] どのようにneo4jデータベースをリセット/クリア/削除するには?
-
[解決済み] 扇形トラップ・狭間トラップ - データベース
-
[解決済み] Django エラー - 一致するクエリが存在しません。
-
[解決済み] 外部キーを主キーにするのは問題ないですか?
-
[解決済み] Python 3 - JDBCで接続する
-
[解決済み] OLTPとOLAPとは。その違いは何ですか?
-
[解決済み】Cassandraのパーティションキー、コンポジットキー、クラスタリングキーの違い?
-
[解決済み】GUID / UUIDデータベースキーの利点と欠点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別関係と非識別関係の違いとは?
-
[解決済み] どのようにneo4jデータベースをリセット/クリア/削除するには?
-
[解決済み] DB2 ログファイルの制限、SQLCODE。-964
-
[解決済み] ORMとODMの違いは何ですか?
-
[解決済み] なぜOracleはoci.dllを見つけられないのでしょうか?
-
[解決済み] FactテーブルとDimensionテーブルの違い?
-
[解決済み】すべてのテーブルに主キーを持たせるべきですか?
-
[解決済み】既存のENUM型に新しい値を追加する
-
[解決済み】SQL Serverデータベースをオフラインにすると、極端な待ち時間が発生する。
-
[解決済み】GUID / UUIDデータベースキーの利点と欠点