0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベースの正規化とは?

Posted at

データベースの正規化とは、「データを整理して、重複をなくし、管理しやすくする」ことです。

例えば、ムダなデータを減らし、更新ミスを防ぐためのルールと考えると分かりやすいです。

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正規形情報を「意味ごと」に整理する(関連データは別のテーブルに分ける)

こうすることで、データが整理され、修正や検索がしやすくなります!

もしデータベースを作るときに「この情報、本当にここに入れていいのかな?」と思ったら、正規化を意識するとスッキリ整理できます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?