データベースの正規化とは、「データを整理して、重複をなくし、管理しやすくする」ことです。
例えば、ムダなデータを減らし、更新ミスを防ぐためのルールと考えると分かりやすいです。
1. 正規化が必要な理由
もしデータを整理せずに保存すると、こんな問題が発生します。
① データが重複する
ID | 名前 | 商品 | 価格 |
---|---|---|---|
1 | 田中 | 本 | 1000 |
2 | 鈴木 | ペン | 200 |
3 | 田中 | ペン | 200 |
→ 「田中さん」のデータが2回出てきています。
② 修正が大変になる
例えば、「ペンの値段が200円→250円に変わった」とします。
でも、データがバラバラに保存されているので、全部のデータを探して修正しないといけません。
→ 更新ミスの原因になります。
③ データの追加や削除が難しくなる
「田中さんが注文をキャンセルした」とき、1行だけ消すと「田中さんの情報自体が消えてしまう」ことも。
データが整理されていないと、うまく削除できない問題が発生します。
2. 正規化のルール
データを整理するために、「正規化」という方法があります。
基本的に**3つのルール(3つの正規形)**を守ると、きれいに整理できます。
【第1正規形】(データを1つずつ分ける)
✔️ 同じ場所に、複数のデータを入れない
ID | 名前 | 商品 | 価格 |
---|---|---|---|
1 | 田中 | 本, ペン | 1000, 200 |
2 | 鈴木 | ペン | 200 |
→ NG!「本, ペン」のように、複数のデータを1つのセルに入れない
ID | 名前 | 商品 | 価格 |
---|---|---|---|
1 | 田中 | 本 | 1000 |
1 | 田中 | ペン | 200 |
2 | 鈴木 | ペン | 200 |
✔️ データを1つずつ分けると、検索や修正がしやすくなる
【第2正規形】(データの重複をなくす)
✔️ データを「主キー」によって正しく分ける
ID | 名前 | 商品 | 価格 |
---|---|---|---|
1 | 田中 | 本 | 1000 |
1 | 田中 | ペン | 200 |
2 | 鈴木 | ペン | 200 |
→ 「田中」や「鈴木」の情報が何回も出てくるのがムダなので、別の表に分ける
分けた後(第2正規形)
✅ 顧客テーブル(お客様情報を管理)
顧客ID | 名前 |
---|---|
1 | 田中 |
2 | 鈴木 |
✅ 注文テーブル(注文した商品を管理)
注文ID | 顧客ID | 商品 | 価格 |
---|---|---|---|
1 | 1 | 本 | 1000 |
2 | 1 | ペン | 200 |
3 | 2 | ペン | 200 |
✔️ 顧客情報と注文情報を分けることで、重複がなくなり、修正しやすくなる
【第3正規形】(情報を「意味ごと」に整理する)
✔️ 「主キー」以外のデータが他のデータに依存しないようにする
注文ID | 顧客ID | 商品 | 価格 | メーカー |
---|---|---|---|---|
1 | 1 | 本 | 1000 | A社 |
2 | 1 | ペン | 200 | B社 |
3 | 2 | ペン | 200 | B社 |
→ 「メーカー」は「商品」に依存する情報なので、別のテーブルに分ける
分けた後(第3正規形)
✅ 商品テーブル(商品の情報を管理)
商品ID | 商品 | 価格 | メーカー |
---|---|---|---|
1 | 本 | 1000 | A社 |
2 | ペン | 200 | B社 |
✅ 注文テーブル(注文情報を管理)
注文ID | 顧客ID | 商品ID |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 2 |
✔️ 情報を「意味ごと」に整理すると、修正がしやすくなる
3. まとめ
✅ 第1正規形 → 1つのセルに1つのデータを入れる
✅ 第2正規形 → データを「主キー」によって分ける(重複をなくす)
✅ 第3正規形 → 情報を「意味ごと」に整理する(関連データは別のテーブルに分ける)
こうすることで、データが整理され、修正や検索がしやすくなります!
もしデータベースを作るときに「この情報、本当にここに入れていいのかな?」と思ったら、正規化を意識するとスッキリ整理できます!