第一正規化
スカラ値の原則
スカラ値とは
単一の値のこと
第一正規化におけるスカラ値の原則とは
一つのセルに一つの値だけになるようにすること
なぜスカラ値でなくてはならないか
スカラ値でないと、主キーが各列の値を一意に決定できないから
実践: 2つの解決方法で第一正規形にしてみる
今自分が作ろうとしている植物図鑑データを使って練習してみます。
花マスタ
花ID | 花名 | 色 |
---|---|---|
044003001 | ミスミソウ | 白、桃、赤、青、紫、黄色 |
色で花をグループ分けをする必要があるため”白、桃、赤、青、紫、黄色”というテキストデータではなく、個々の色情報を持たせたいです。
方法1 横に展開
花マスタ
花ID | 花名 | 色1 | 色2 | 色3 | 色4 | 色5 | 色6 |
---|---|---|---|---|---|---|---|
044003001 | ミスミソウ | 白 | 桃 | 赤 | 青 | 紫 | 黄 |
方法2 縦に展開
花マスタ
花ID | 花名 | 色 |
---|---|---|
044003001 | ミスミソウ | 白 |
044003001 | ミスミソウ | 桃 |
044003001 | ミスミソウ | 赤 |
044003001 | ミスミソウ | 青 |
044003001 | ミスミソウ | 紫 |
044003001 | ミスミソウ | 黄 |
方法1の場合は、最初に想定した色の数を超える花がでてきた時、テーブルにカラムを追加しなければ色の登録ができなくなります。 拡張性がないため、縦に展開する方法を採用します。
主キーを考える
方法2の列を特定するためには、”花マスタ”テーブルの主キーを{花ID、花名、色}にする必要があります。 花に色情報が無いってことはないのですが、データ管理の都合上、色を登録しなくても花ID、花名を登録できるようにしておきたいです。
主キーにnullはセットできない ため、テーブル分割を行います。
花マスタ
花ID | 花名 |
---|---|
044003001 | ミスミソウ |
花の色テーブル
花ID | 色 |
---|---|
044003001 | 白 |
044003001 | 桃 |
044003001 | 赤 |
044003001 | 青 |
(略)
参考