【基本】DBの正規化について知ろう
正規化とは
正規化とは、データの重複をなくし、整合性の取れたデータの取り扱いができるようにデータベースを設計することです。正規化を行うことによって、データベースへのデータの追加・更新・削除などに伴ったデータの整合性の確認や誤った削除を防ぐことができ、メンテナンスのしやすいデータベースを作成することが可能となります。 言語化するとわかりづらい部分もあるので、後ほど例を挙げてご説明します。
正規化をするメリット
正規化をするメリットとしては以下のようなものが挙げられます。 ①汎用性の向上 データの整理がなされることで、システム間の連携や移行などが行いやすくなります。 ②容量削減 無駄な重複を削除することで、その分のデータ領域を確保でき、より多くのデータの保存が可能になります。 ③メンテナンスのしやすさ 1つのテーブルに不必要な重複しているデータを保持しないため、データに変更があった場合の修正箇所が減りメンテナンスがしやすくなります。 「正規化とは」の部分と重複している箇所もありますが、上記のメリットがあるため正規化は推奨されています。
正規化の具体例
ここまで正規化の概要とメリットについてお話ししましたが、わかりづらく感じる方もいらっしゃるかもしれないので、具体例を使用し説明いたします。 例えば、アパレル企業の顧客を管理するデータベースがあるとします。 内容としては、顧客のidや名前や年齢、顧客が購入した商品とその値段が確認できるようなものです。 このようなデータベースを正規化を使用せずに作成すると以下のようなデータベースになります。
【usersテーブル】
user_id | user_name | age | item_name | price | item_name2 | price2 |
---|---|---|---|---|---|---|
1 | 田中太郎 | 25 | デニムパンツ | 4000 | カラーパンツ | 5000 |
2 | 山田花子 | 31 | タイトスカート | 3000 | デニムパンツ | 4000 |
3 | 中島次郎 | 26 | プリントTシャツ | 2000 | ||
4 | 佐藤明子 | 28 | タイトスカート | 3000 |
では、上記テーブルを正規化したものを確認しましょう。 ※以下の正規化の説明は詳しく説明すると複雑な部分もあるため、初心者向けに簡単にご説明しています。
・第1正規系
【usersテーブル】
user_id | user_name | age | item_name | price |
---|---|---|---|---|
1 | 田中太郎 | 25 | デニムパンツ | 4000 |
1 | 田中太郎 | 25 | カラーパンツ | 5000 |
2 | 山田花子 | 31 | タイトスカート | 3000 |
2 | 山田花子 | 31 | デニムパンツ | 4000 |
3 | 中島次郎 | 26 | プリントTシャツ | 2000 |
4 | 佐藤明子 | 28 | タイトスカート | 3000 |
・第2正規系
【usersテーブル】
user_id | user_name | age | item_id |
---|---|---|---|
1 | 田中太郎 | 25 | 1 |
2 | 山田花子 | 31 | 2 |
3 | 中島次郎 | 26 | 3 |
4 | 佐藤明子 | 28 | 2 |
item_id | item_name | price |
---|---|---|
1 | デニムパンツ | 4000 |
2 | タイトスカート | 3000 |
3 | プリントTシャツ | 2000 |
正規化のデメリット
ここまでデータベースを正規化するメリットを主にお話ししてきました。 基本的には汎用性が高まったりメンテナンスがしやすかったりとメリットの多い正規化ですが、場面によってはデメリットとなりうることもあります。 ・アクセス速度が低下する場合がある。 データベースの整理・分割をしすぎると、場合によっては見つけたいデータを取り出しずらくなってしまうなど、データベースの正規化をすることによってアクセス速度の低下に繋がることがあります。その場合は、アクセス速度を重視するために、あえて複雑な正規化を行わないこともあります。
まとめ
いかがでしたでしょうか? 正規化は、データベースを作成する際の重要な考え方のひとつです。 初めは難しい部分もあるかと思いますが、少しずつ慣れていきましょう!