LoginSignup
0
1

More than 3 years have passed since last update.

概要

正規化とはDBを設計する際に重要となってくるデータ管理の概念。

DB設計って何?正規化って何?

この記事はそういった方々に対して
また自分の備忘録でもあります。。。

DB設計とは?

システム開発を行う上で最初にDBの設計を行っていくことで強固なDBを作ろうという理論。

まず、データベースを設計する際に重視される考え方として、

DOA(データ中心アプローチ)がある

DOAの考え方として、振る舞いから考えるのではなく、
システムの中で必要なデータからシステム構造を考えていく考え方である。

なぜ、DOAを採用するべきなのか?

例えば、1000個のデータが既に商品テーブルに保存されているとします。

商品テーブルに商品番号カラムを新たに追加することになりました。

こうなると、1000個のデータを修正する必要が出てきます。

ですが、最初の時点(=DBを設計する)で修正するのなら、
どちらが少ない労力で作業を済ませられるのかは明白です。

DB設計を行うことでシステムを開発していく上で強固かつ効率的にDBを作成することができます。

正規化とは何?

設計段階で重複してしまう冗長なデータを排除し、データの一元的な管理を目指す理論。

重複するデータが存在することでDBを変更する必要がある場合、Aは直したのにBは直していなかったなどの不具合を発生させてしまう。

重複するデータとは何か?

重複するデータとは複数のレコードが同じデータを持っていることを指す。

商品テーブル

商品名 仕入先 仕入先コード
りんご A商会 A001
みかん A商会 A001
ぶどう B商会 A002

りんごとみかんの仕入先をA商会からB商会に変更する際、現在のデータベースだと
仕入先と仕入先コードを変更する必要が出てくる。

このような状態ではA商会をB商会に変更したが、仕入先コードの変更を忘れた。
あるいは仕入先コードを変更したが、A商会をB商会に変更することを忘れた。

こういったミスが生じ、DBに矛盾が生じてしまう。

そのため、正規化でテーブルからデータの重複をなくしていく必要がある。

正規化の段階

正規化には段階があり、
非正規形から第5正規形までの段階が存在する。

この記事では第三正規形までを取り扱います。

非正規形とは正規化を何も行っていない段階を指す。

前述したデータの重複を起こす危険があり、DBを管理していく上では不適切。

第一正規形は一つのカラムに一つのデータが保存されている状態を指す

一つのカラムに一つのデータが保存されている状態とは、一つのカラムにカンマ区切りやスペースで区切って複数の値が入っていないことを指す。

第二正規形は完全関数従属で保存されている状態を指す

そもそも関数従属とは何か?

関数従属とはAの値が決まると、Bの値もわかる関係性を指す。

先ほど、説明に使った商品テーブルで例えると、

商品名 仕入先 仕入先コード
りんご A商会 A001
みかん A商会 A001
ぶどう B商会 A002

仕入先が決まれば、仕入先コードも決まる。

この関係性を関数従属という。

そして、完全関数従属は部分関数従属が排除された状態を指す。

部分関数従属とは、キーの一部が主キーに従属した状態を指す。

仕入伝票 商品名 注文数 単価
1 りんご 20 100
2 みかん 100 100
3 ぶどう 10 150

このテーブルの主キー(レコードを特定するカラム)は仕入伝票と商品名である。

この場合、部分関数従属とは商品名カラムと単価カラムになる。

りんごとわかれば、自然と単価も決まってくるからです。

なので、第二正規形とする場合は

仕入伝票 商品名 注文数
1 りんご 20
2 みかん 100
3 ぶどう 10
商品名 単価
りんご 100
みかん 100
ぶどう 150

仕入テーブルと商品テーブルを分割し、管理する形式になります。

第三正規形は推移関数従属を排除したテーブルの状態を指す

推移関数従属

主キー以外の属性同士で従属関係を持っている状態

仕入伝票 仕入先 仕入先コード 商品名 注文数
1 A商店 A001 りんご 20
2 A商店 A001 みかん 100
3 B商店 A002 ぶどう 10

仕入テーブルの主キーは仕入伝票にあたる

しかし、このテーブルでは仕入先と仕入先コードは従属性を持っている。

なので、この場合は

仕入伝票 仕入先 商品名 注文数
1 A商店 りんご 20
2 A商店 みかん 100
3 B商店 ぶどう 10
仕入先 仕入先コード
A商店 A001
B商店 A002

このように仕入テーブルと仕入先テーブルを分割することで第三正規形となる。

要約

テーブルの各カラムが依存することでデータの重複が発生してしまう。

そのため。正規化とは主キー以外の依存を排除している。

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