koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

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

学習した日は1つはアウトプットしよう思い、今日は 羽生 章洋 著 『楽々ERDレッスン』を読み、正規化について学んだため、まとめたいと思います。

正規化とは?

データベースの原則として、「一つの事実は一つの場所にある」というものがあります。正規化とは、データの重複を無くし、この原則を実現するための作業を指します。

正規化の具体的な手順とは?

  1. 業務内容、業務の流れをもとに、全ての項目、データを入力する
  2. 入力した中で重複しているものを削除する
  3. 冗長なもの(改めて書くほどのものではないもの、合計など)を排除する
  4. IDをつける

という手順があります。

ここで、重要なことが2点あります。それは、アイデンティファイアと業務に沿った正規化を行うということです。

アイデンティファイアとは

アイデンティファイアとは、「このレコードは他のレコードとは違うんだ」と、識別するためのものです。

例えば、学校というデータベースがあり、生徒といういくつものレコードがあったとします。この時、生徒個人個人を特定できるようなものがアイデンティファイアになります。この例なら、出席番号などがアイデンティファイアとなることでしょう。

業務に沿った正規化を行うとは?

データベース設計で重要なことは、業務に沿った使い勝手の良い正規化を行うということです。パッと良い例が浮かびませんが💦

データベースが実際の業務の流れからかけ離れてしまうと、使い勝手が悪くなってしまいます。そのため、データベース設計者は業務に沿ったデータベースを設計するために、業務についてある程度知っておかなければなりません。

正規化は必ず行うものなのか?

非正規化することも重要だと言われています。その理由として、ハードディスクの容量の問題があるからです。正規化するということは、自然とテーブルの数が増えます。しかし、それはハードディスクの容量を圧迫し、パフォーマンスに影響が出ることがありました。そのため、非正規化を行うことも重要なのです。

しかし、現在では、ハードディスクの性能の向上により、容量圧迫についてはそれほど大きな問題となっていないということがあります。そこで重要となってくるのが、適切なインデックス(レコードに対して見出しをつける)設計を行うことです。

適切なインデックス設計を行うことで、検索の負荷が減り、パフォーマンスの向上に繋がるのです。

と、このようにまとめてみましたが、いまいちしっくりこない部分もあり、自分の中で、正規化という概念がうまく消化しきれていない感じです。

間違えている部分があれば是非教えてください🙇‍♂️

参考文献