関係データベースの第一正規形を扱う
第一正規形はセルを単一の値にする
関係データベースの正規化で、非正規形の次に置く段階が第一正規形 (First Normal Form, 1NF) である。1NF の関係は、各属性がドメイン上の単一の値だけを持ち、繰返しグループを含まない。行は候補キーで一意に識別できる。
1NF では、属性の値は原子的な単一の値であり、セルは別の関係や値のリストを持たない。どこまでを一つの値とみなすかはドメインの切り方により、住所を一続きの文字列にするか都道府県と市区町村に分けるかは、その単位で問い合わせるかで決まる。1NF が除くのは、同じ種類の事実が1行の中に複数並ぶことである。
繰返しを行の方向へ展開する
非正規形の注文表では、商品コード・商品名・数量 が1セルに複数入っていた。明細を1行1件に展開すると、各セルは単一の値になる。
| 注文ID | 店舗名 | 商品コード | 商品名 | 数量 |
|---|---|---|---|---|
| 1 | 東店 | A01 | りんご | 2 |
| 1 | 東店 | A02 | みかん | 1 |
| 2 | 西店 | A01 | りんご | 3 |
注文ID だけでは行を区別できない。候補キーは注文と明細を組にした (注文ID, 商品コード) になる。1つの注文に同じ商品コードが複数ありうるなら、明細番号を足して (注文ID, 明細番号) を候補キーにする。
第一正規形でも従属の重複は残る
1NF にすると、「商品コードが A02 の明細」をセル内の分割なしに検索できる。明細の追加と削除は行の追加と削除に一致する。
それでも次の重複は残る。
- 店舗名は
注文IDだけで決まる。明細の数だけ同じ店舗名が繰り返される。 - 商品名は
商品コードだけで決まる。同じ商品が別注文に現れるたびに繰り返される。
店舗名を改めるときは、その注文の明細行をすべて更新する。候補キーの一部にだけ依存するこの関係は部分関数従属と呼ばれ、第二正規形で切り離す対象になる。1NF は値を原子的にし、1行が1つの明細事実を表すところまでを整える。