トップページ > コンテンツ > データベース関連メモ > 正規形 > 第2正規形

第2正規形(2NF)とは

定義

  • 第1正規形であること。
  • リレーションRの全ての非キー属性がキーに対して、完全従属していること。

概要

部分関数従属性を取り除き、完全従属(全ての非キーが主キー全体に対して関数従属)している状態のことを指す。

つまり、
属性A(候補キー) 属性B(候補キー) 属性C(非キー)
において、
  • {属性A,属性B}→属性C
  • 属性B→属性C
のような関係が成り立つ場合(※1)に、

属性A(候補キー) 属性B(候補キー)

属性B(候補キー) 属性C(候補キー)
のように、属性B→属性Cの部分を分離する。

(※1)主キー{属性A,属性B}の一部である{属性B}に関数従属することから、部分関数従属があるという。

第2正規形(2NF)の効果

・「属性Cの情報を追加したいのに、属性Aが決まらないと更新できない」といった問題を抑止できる


例としては、第2正規化前の状態だと、
伝票番号 商品ID 商品名
の形になるため、伝票番号が決まらないと、新たに商品情報を登録することができない。


・「属性Bと属性Cの対応関係の情報は残しておきたいのに、属性A・属性B・属性Cのままだとレコード削除時に消えてしまう」といった問題を抑止できる。


例としては、第2正規化前の状態だと、
伝票番号 商品ID 商品名
の形になるため、伝票情報のレコードを消してしまうと、商品の情報も失ってしまう。

伝票番号 商品ID

商品ID 商品名
に分けておけば、商品情報は残しておくことができる。


・「属性Bと属性Cの関係がちぐはぐした更新をしてしまう(※4)」といった問題を抑止できる。


例としては、第2正規化前の状態だと、
伝票番号 商品ID 商品名
0000A 00001 りんご
0000B 00001 ばなな
のような、同じ商品IDなのに商品名が異なるといった更新ミスをしてしまうリスクがある。

第2正規形(2NF)の正規化例

第1正規形

伝票番号 顧客番号 顧客名 住所 商品コード 商品名 数量 合計金額

ここでは伝票番号と商品コードの組み合わせが、全てのレコードを一意に特定する主キー。
  • 伝票番号→「顧客番号・顧客名・住所」が特定可能
  • 商品コード→「商品名」が特定可能

第2正規形

伝票番号 商品コード 数量 合計金額

伝票番号 顧客番号 顧客名 住所

商品コード 商品名
最終更新:2023年07月30日 21:45