データベース正規化入門
データの整合性を保ち、効率的なデータ管理を実現するための「正規化」プロセスを、ステップバイステップで学びましょう。
正規化とは何か?
正規化とは、データの冗長性(重複)をなくし、更新時の不整合を防ぐためにテーブルを適切に分割するプロセスです。目的は「一つの事実は、一か所にのみ保存する」という原則を実現し、データの保守性や一貫性を高めることにあります。
例えば、ある資格の名称が変更された場合、非正規化なデータでは関連する全ての行を手動で更新する必要があり、更新漏れや表記揺れのリスクが生じます。正規化を行うことで、マスターテーブルの一か所を修正するだけで、全てのデータに正しく反映されるようになります。
Step 0:非正規形(正規化の前)
非正規形のテーブルは、1つのセルに複数の値が入っている「繰り返し項目」を持つ状態です。例えば、以下の「問題管理表」では、「回答選択肢」列に4つの選択肢がまとめて入っており、非正規形と言えます。
分類 | 区分 | 実施年度 | 問題番号 | 問題内容 | 回答選択肢 (ア, イ, ウ, エ) | 正解 |
---|---|---|---|---|---|---|
IPA | データベーススペシャリスト | 2020 | 1 | CAP定理に関する問題... | 選択肢ア, 選択肢イ, 選択肢ウ, 選択肢エ | イ |
IPA | データベーススペシャリスト | 2020 | 2 | NoSQLに関する問題... | 選択肢ア, 選択肢イ, 選択肢ウ, 選択肢エ | イ |
Step 1:第1正規形(1NF)への変換
第1正規形(1NF)のルールは「繰り返し項目をなくし、すべての列の値をアトミック(それ以上分割できない単一の値)にする」ことです。非正規形のテーブルを1NFにするには、繰り返し項目を行として展開します。
しかし、今回の例では「回答選択肢」を単純に行にすると管理が煩雑になるため、列として分解します。これにより、各セルが単一の値を持ち、1NFの条件を満たします。
分類 | 区分 | 実施年度 | 問題番号 | 問題内容 | 回答ア | 回答イ | 回答ウ | 回答エ | 正解 |
---|---|---|---|---|---|---|---|---|---|
IPA | データベーススペシャリスト | 2020 | 1 | CAP定理... | 選択肢ア | 選択肢イ | 選択肢ウ | 選択肢エ | イ |
IPA | データベーススペシャリスト | 2020 | 2 | NoSQL... | 選択肢ア | 選択肢イ | 選択肢ウ | 選択肢エ | イ |
ポイント: このテーブルの主キーは {分類, 区分, 実施年度, 問題番号} の4つの列を組み合わせた複合キーです。これにより各行が一意に定まります。
Step 2:第2正規形(2NF)への変換
第2正規形(2NF)のルールは「第1正規形であり、かつ、部分関数従属を解消する」ことです。部分関数従属とは、複合主キーの一部の列だけで値が決まってしまう列が存在する状態を指します。
先ほどの1NFのテーブルでは、「分類」や「区分」は問題ごとに同じ値が繰り返し登場し、冗長です。例えば、「区分名(データベーススペシャリスト)」は主キーの一部である「区分(コード)」だけで決まり、「実施年度」や「問題番号」には依存しません。これが部分関数従属です。この従属性を解消するため、テーブルを分割します。
分類コード | 区分コード | 実施年度 | 問題番号 | 問題内容 | 回答ア | ... | 正解 |
---|---|---|---|---|---|---|---|
1 | 1 | 2020 | 1 | CAP定理... | 選択肢ア | ... | イ |
1 | 1 | 2020 | 2 | NoSQL... | 選択肢ア | ... | イ |
分類コード | 分類名 |
---|---|
1 | IPA |
区分コード | 区分名 |
---|---|
1 | データベーススペシャリスト |
ポイント: 「分類名」と「区分名」をそれぞれマスタテーブルとして独立させました。元の問題テーブルにはID(分類コード、区分コード)のみを保持します。これにより、例えば「データベーススペシャリスト」の名称が変更されても、「区分マスタ」の1レコードを更新するだけで済み、データの整合性が保たれます。