繰返し項目を分離して各セルが単一値になるようにした正規形。
第1正規形(1NF)とは、1つのマス(セル)の中に値が複数入った「繰返し項目」をなくし、すべてのセルがちょうど1つの値だけを持つようにした表のことです。正規化(=データの重複や矛盾をなくすために表を整理する作業)の出発点になります。
身近な例で考えると、表計算ソフトで1つのマスに改行を使って何個も値を書き込んでしまった状態を、1個ずつ別々の行に書き直すイメージです。こうすると「特定の商品だけ探す」「数量を合計する」といった操作が正しくできるようになります。
上のツールで▶ボタンを押すと、1つのセルに複数の値が入った非正規形の表が、行の分割によって1セル1値のきれいな表に変わっていく流れを確認できます。
繰返し項目を分離する基本ルールは、「値の個数だけ行を増やす」ことです。1つのセルにN個の値があれば、その行をN行に展開します。
分離するときのポイントは次のとおりです。
・繰返している列を縦に展開:「りんご / みかん」を、りんごの行とみかんの行に分ける
・関連する値も一緒に分ける:商品名と数量はペアなので、対応をくずさず分割する
・共通の値はコピー:注文番号や顧客名など、繰返していない列は各行に同じ値を複製する
上のツールのSTEP3で、注文番号001の「りんご / みかん」の1行が、りんごの行とみかんの行の2行に分かれ、注文番号と顧客名がコピーされる様子を確認できます。
非正規形の表を第1正規形にする手順は、次の3ステップで進めます。
・① 繰返し項目を探す:1つのセルに値が複数入っている列を見つける
・② 行に展開する:値の個数だけ行を増やし、共通の列はコピーして1セル1値にする
・③ 主キーを決める:分割で同じ値が複数行に現れるため、行を一意に特定できる列の組(複合主キー)を主キーにする
例の表では、行分割により注文番号001が2行になるため、「注文番号 + 商品名」を主キーにします。主キー(=行を1つに定める列の組)が決まれば、第1正規形は完成です。なお1NFは正規化の最初の段階で、この後さらに第2・第3正規形へと整理を進めます。
なぜ1セルに1つの値しか入れてはいけないのか。それは、1つのセルに複数の値を詰め込むと、コンピュータが値を正確に取り出せなくなるからです。
繰返し項目を放置すると、次のような問題が起きます。
・検索ができない:「りんごを注文した人を全員探せ」という要求に、「りんご/みかん」とまとまったセルでは正確に応えられない
・集計がずれる:数量を合計したくても、「3/5」というひとかたまりの値から数字を取り出す特別な処理が必要になる
・更新が危険:「みかんだけ数量を変えたい」と思っても、セル全体を書き換えるしかなく、りんごの数量まで誤って消す可能性がある
身近な例で考えると、連絡先として「090-1234-5678 / 03-1234-5678」のように2つの電話番号を1マスに書いた名簿から、「携帯番号だけで一覧を作りたい」と言われても困る、という状況と同じです。1セルに1値を徹底することで、データを安全・確実に扱えるようになります。
第1正規形(1NF)は、正規化(=データの重複や矛盾をなくすために表を整理していく作業)の第一段階です。1NFを満たしていない表は、その先の正規形(2NF・3NF)に進めません。
正規化の段階は次のように積み上がります。
・非正規形:繰返し項目があり、1セルに複数値が入った状態
・第1正規形(1NF):繰返し項目をなくし、1セル1値にした状態 ←このページの内容
・第2正規形(2NF):さらに「主キーの一部だけで決まる列」を別の表に分けた状態
1NFは「表の形を整える」ステップです。まず繰返しをなくして、コンピュータがきちんと扱える形にする。それができて初めて、次のステップ(2NF)で「情報の重複をなくす」作業に進めます。1NFなしに2NFはない、2NFは1NFの上に成り立つという関係を押さえておきましょう。