【初心者向け】データベースの正規化まとめ(第1正規化〜第3正規化)

データベース正規化まとめ記事のアイキャッチ

このページにはプロモーションが含まれています。

目次
プログラミング言語の人気オンラインコース

はじめに

こんにちは、はなまるです。

今回はデータベースの「正規化」について、学んだことをまとめてみました。

ご参考になれば嬉しいです。

おすすめの読者

データベースの正規化がイマイチよく分からない方

IT初心者にも分かりやすい解説を求めている方

正規化をする目的

とらまる

そもそも、どうして正規化をしなければいけないの?

正規化する目的は、整合性や一貫性を維持するためです。

正規化されていないと、更新時異常(異状)という不具合が発生します。

手順に沿って別の表に分解していくのが正規化です。

この記事では、第1正規化から第3正規化についてお伝えします。

非正規形

非正規形とは、繰り返し項目がある表のことです。

どんな表なのか、次表の例で見ていきましょう。

売上番号日付顧客ID顧客名商品ID商品名単価数量
12024/12/1C1はなまるN01パソコン10001
N03イヤホン1002
22024/12/2C2とらまるN01パソコン10001
N02マウス4002
32024/12/3C3ねこまるN04デスク6001
N05モニター8002
売上表

売上表の水色背景の部分に注目してください。

商品コード、商品名、単価、数量が2次元の表ではなく、複数行に繰り返されています。

繰り返しを解消して、ひとつの属性にひとつのデータになるように分解します。

それが第一正規化です。

第1正規化

商品IDを複合キーにして、売上表と売上明細表に分解すると次のようになります。

複合キーとは?
複数の項目を組み合わせて、一行を一意に識別できるキーのこと

売上表

売上番号日付顧客ID顧客名
12024/12/1C1はなまる
22024/12/2C2とらまる
32024/12/3C3ねこまる
売上表

売上明細表

売上番号商品ID商品名単価数量
1N01パソコン10001
1N03イヤホン1002
2N01パソコン10001
2N02マウス4002
3N04デスク6001
3N05モニター8002
売上明細表

これで、「ひとつの属性にひとつのデータ」である2次元の表(=第1正規形)にできました。

第1正規化は、繰り返し部分をなくすこと

第2正規化

例の表は第1正規形にできました。

売上明細表は主キーがふたつの属性で構成されています。

主キーの一部が関数従属していることを部分関数従属といいます。

第2正規化でこの部分関数従属を分解します。

第2正規化部分関数従属の画像

売上明細表から商品IDをもとに部品表を参照できる形にします。

売上明細表

売上番号商品ID数量
1N011
1N032
2N011
2N022
3N041
3N052
売上明細表

商品表

商品ID商品名単価
N01パソコン1000
N02マウス400
N03イヤホン100
N04デスク600
N05モニター800
商品表

第2正規化は、部分関数従属をなくすこと

第3正規化

売上表に注目すると、顧客IDが決まれば顧客名が決まるという関数従属が成り立ちます。

非キー属性間で関数従属していることを推移的関数従属といいます。

第3正規化推移的関数従属の画像

第3正規化で推移的関数従属を分解します。

売上表

売上番号日付顧客ID
12024/12/1C1
22024/12/2C2
32024/12/3C3
売上表

顧客表

顧客ID顧客名
C1はなまる
C2とらまる
C3ねこまる
顧客表

以上で、非正規形から第3正規形に分解できました。

第3正規化は、推移的関数従属をなくすこと

おわりに

今回はデータベースの正規化についてまとめました。

はなまる

ここまでお読みいただきありがとうございました!

よかったらシェアしてください!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

フリーランスとしてWeb制作をしています。
Webアプリ開発・セキュリティの勉強中です。
学んだことをアウトプットしてみたいと思い、ブログでの発信に挑戦中!
[保有資格:基本情報技術者]

コメント

コメントする

CAPTCHA


目次