0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

データベースの正規化について

Posted at

今回はデータベースについて学習したので、学習内容をアウトプットしていこうと思います。
特に重要だと思ったデータベースの正規化についてまとめられたらいいなと思います。

データの正規化とは

まず、データの正規化について説明します。

正規化とは、データベースで使う情報を整理するための手順です。データベースでは、情報を表(テーブル)として整理して保存します。正規化をすることで、情報が整理されて分かりやすくなります。
たとえば、顧客情報を保存するデータベースを考えてみます。顧客の名前や住所、電話番号などを保存するテーブルがあります。正規化をすると、これらの情報が効率的に整理されます。
実際にこちらを正規化して説明します。

基データ
顧客ID 顧客名 住所 電話番号 注文ID 注文日 商品名 価格
1 山田太郎 東京都... 012-3456-789 1 2024-04-01 商品A 1000
1 山田太郎 東京都... 012-3456-789 2 2024-04-15 商品B 2000
2 田中花子 大阪府... 098-7654-321 3 2024-04-05 商品C 1500

上記の図では、例えば「顧客情報」と「注文情報」が同じテーブルに混在している状況です。正規化を行わないと、顧客情報が変更された際に注文情報に影響を及ぼす可能性があります。正規化によってデータを分割することで、情報が整合的に保たれます。

なので、顧客情報」と「注文情報」を分割しました。

顧客ID 顧客名 住所 電話番号
1 山田太郎 東京都... 012-3456-789
2 田中花子 大阪府... 098-7654-321
注文ID 顧客ID 注文日 商品名 価格
1 1 2024-04-01 商品A 1000
2 1 2024-04-15 商品B 2000
3 2 2024-04-05 商品C 1500

これによって、顧客名などが変更された場合でも、注文情報には影響を与えることは無くなりました。

現状、顧客情報と注文情報のテーブルにおいて、注文情報は顧客IDに関数従属しています。つまり、注文情報は顧客IDがわかれば一意に特定することができます。しかし、商品名と価格は注文IDにのみ関数従属しています。つまり、注文IDがわかれば一意に特定できますが、顧客IDだけでは特定できません。
そこで、以下のように、商品名と価格を注文IDに関連付ける注文明細テーブルを作成します。

顧客ID 顧客名 住所 電話番号
1 山田太郎 東京都... 012-3456-789
2 田中花子 大阪府... 098-7654-321
注文ID 顧客ID 注文日
1 1 2024-04-01
2 1 2024-04-15
3 2 2024-04-05
注文ID 商品名 価格
1 商品A 1000
2 商品B 2000
3 商品C 1500

このようにすることで、注文情報は注文IDに関数従属し、顧客情報とは独立して管理されるようになります。データベースがより効率的に整理され、データの整合性が保たれます。

まとめ

今回、正規化について学習内容をまとめてみました。

正規化を行うことで、データの重複や不整合を避け、データベースの管理がしやすくなります。データの整合性を保ちながら、効率的なデータ操作や検索が可能になるため、データベース設計において重要なステップとなります。

正規化によってデータベースの構造がより洗練され、データの信頼性やセキュリティも向上します。データベースを効率的に活用するためには、正規化を適切に行うことが重要だと思いました。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?