もちろんです。DB(リレーショナルデータベース)の第1〜第3正規化は、「データの重複や不整合を減らすために、テーブルを整理・分割すること」と考えると分かりやすいです。
| 正規化 | 簡単にいうと | ポイント |
|---|---|---|
| 第1正規形(1NF) | 1つのセルに1つの値 | 繰り返し・複数の値をなくす |
| 第2正規形(2NF) | 主キーの一部だけに依存する項目を分ける | 部分関数従属をなくす |
| 第3正規形(3NF) | 主キー以外の項目に依存する項目を分ける | 推移的関数従属をなくす |
❌ 正規化前
| 学生ID | 名前 | 履修科目 |
|---|---|---|
| 1 | 田中 | Java, Python |
⭕ 第1正規形
| 学生ID | 名前 | 履修科目 |
|---|---|---|
| 1 | 田中 | Java |
| 1 | 田中 | Python |
つまり、「Java, Python」のように複数の値を1セルに入れないということです。
例えば、
| 学生ID | 科目ID | 学生名 | 成績 |
|---|---|---|---|
| 1 | A01 | 田中 | 80 |
| 1 | A02 | 田中 | 90 |
主キーが「学生ID+科目ID」だとします。
しかし、学生名は学生IDだけで決まります。
→ 学生情報を別テーブルに分離します。
学生テーブル
| 学生ID | 学生名 |
|---|---|
| 1 | 田中 |
成績テーブル
| 学生ID | 科目ID | 成績 |
|---|---|---|
| 1 | A01 | 80 |
| 1 | A02 | 90 |