第二正規形
別名:第2正規形,2NF
【英】second normal form
第二正規形とは、リレーショナルデータベースのデータベース構造(リレーション)を設計する際に作られる正規形の一つで、第一正規形であるデータに対して行われる正規化のことである。
第一正規形を第二正規形にするには、キーの要素が複数あるテーブルの項目で、キーのどちらかにしか従属しない項目を分離する。
第二正規形を作る例として、「受注番号、商品番号、商品名、単価、数量」を「受注番号、商品番号、数量」、「商品番号、商品名、単価」にする、といったことが挙げられる。商品番号さえ分かれば商品名と単価は求められるから、商品の単価が変更になっても、影響範囲を極力限定できる。
リレーショナルデータベースの正規化には、第一正規形から第五正規形まであるが、そのうち第一正規形、第二正規形、第三正規形までがよく利用される。
第2正規形
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/12 07:30 UTC 版)
ある関係が、第1正規形で、かつ、すべての非キー属性が、すべての候補キーに対して完全従属するとき、第2正規形 (second normal form; 2NF) であるという。つまり、第2正規形では、候補キーの一部に関数従属する非キー属性があってはならない。 A及びBを属性または属性の集合としたとき、「AがBに関数従属する」とは、Bの値を決めると、常にAの値が一つに定まるような性質をAが有することをいい、これをB → Aと書く。矢印の左側、つまりここでのBのことを決定項、右側、つまりここでのAのことを従属項という。属性の集合は { } で括る。(なお、A → A、{A, B} → A のように、従属項と決定項が同じか、従属項が決定項に含まれる属性だけからなる場合を自明な関数従属といい、以下の説明では関数従属から自明な関数従属を除く。) {会員番号, 会員氏名} という関係の場合、会員番号が決まれば会員氏名も一つに定まるから、会員氏名は会員番号に関数従属する。この例でわかるように、関数従属しているためには、従属項の値が単に一つの値に対応することだけが必要であり、従属項の実際の値を導き出すのに、決定項の値だけでは情報が不足していても良い。つまり、関数従属とは、決定項が従属項のデータを取り出すための「アドレス」として使えることを意味する。 複数の属性からなる決定項のうち一部の属性にも関数従属することを部分(関数)従属(性) といい、複数の属性からなる決定項に関数従属するが部分従属はしないことを完全(関数)従属(性) という。つまり、決定項に「余分な属性」がない場合が完全従属である。 候補キーでなく、かつ、候補キーの一部でもないような属性を「非キー属性」という。候補キーに部分従属する非キー属性は、それらが表す事象の発生・消滅・変化の点において、その他の属性と直接の関連がないにも関わらず、それらとともに一つの組にまとめられてしまっている。そのため、第2正規形でない関係は、そのような属性をその他の属性とは独立して挿入・削除・更新する必要が生じるにも関わらず、それをすることができない(無理に行えば更新異常を起こす)。第2正規形では、この問題の一部が解決されるが、推移的関数従属性(後述)が残る。 例えば、{会社コード, 代表者氏名, 従業員番号, 従業員氏名} という従業員台帳関係で、{会社コード, 従業員番号} の集合が候補キーだとすると(従業員番号は会社内でのみ一意性が保証されているものとする)、会社コード → 代表者氏名 という部分従属があるから、この関係は第2正規形ではない。この関係では、会社コードと代表者氏名の対応が組によって異なるという事態が発生する危険があるし、従業員のデータが存在しない会社については会社コードと代表者氏名の対応を保存することができない。 第1正規形の関係は、常に無損失なように第2正規形に分解することができる。無損失とは、分解してできた関係を結合して元の関係に復元できることを指す。
※この「第2正規形」の解説は、「関係の正規化」の解説の一部です。
「第2正規形」を含む「関係の正規化」の記事については、「関係の正規化」の概要を参照ください。
- 第2正規形のページへのリンク