正規化って何?
最近、「正規化って何ですか?」と聞かれることがあったのですが、上手く説明できませんでした。
今であれば以下のように説明するというのを簡単に書いてみました。
正規化は、データベース設計で同じ情報が何度も繰り返されないように整理する方法です。これを実施することで、データの一貫性を保ち、更新や削除が楽になります。
例えば、こんな社員テーブルがあったとします。
正規化前(重複あり)
社員ID | 名前 | 年齢 | 部署 |
---|---|---|---|
1 | 田中 太郎 | 30 | 営業部 |
2 | 中村 次郎 | 25 | 人事部 |
3 | 吉田 八之助 | 40 | 人事部 |
ここで「人事部」という情報が2回出てきます。もし「人事部」を「人事管理部」に変更したい場合、全てのレコードを修正しなければならず、数千件のレコードがあったら大変です。また、修正漏れがあった場合、「人事部」と「人事管理部」が同時に存在してしまうといったことも考えられます。
正規化後(重複をなくす)
正規化を行うと、「人事部」のような情報を別のテーブルに分けて管理できます。これで、部署名を変更する時に社員テーブルを修正する必要がなくなります。
社員テーブル(変更後)
社員ID | 名前 | 年齢 | 部署ID |
---|---|---|---|
1 | 田中 太郎 | 30 | 1 |
2 | 中村 次郎 | 25 | 2 |
3 | 吉田 八之助 | 40 | 2 |
部署テーブル(分割後)
部署ID | 部署名 |
---|---|
1 | 営業部 |
2 | 人事部 |
このように、正規化をすることで部署名を変更するのが簡単になり、データの整合性を保つことができます。
正規化のメリットとデメリット
メリット
- データの重複をなくして管理がしやすくなる
- 更新や削除時に誤ってデータを間違えるリスクを減らせる
デメリット
- 複数のテーブルを結合する必要があるので、クエリが複雑になる
- 結合が多くなる分、パフォーマンスが少し低下することがある
正規化は便利ですが、状況によってはデメリットもあるため、バランスを考えて適切に使用することが大切です。
まとめ
正規化の基本的な考え方を簡単に触れてみました。普段なんとなく使っている言葉でも説明してと言われると困ってしまうものですよね。皆さんなら、どのように説明しますか?