1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

雰囲気で理解するデータベースの正規化(初心者向け)

Posted at

はじめに

基本情報の試験でも出題されるデータベースの正規化についてまとめました。
本記事は基本情報試験レベルの正規化の問題がわからない方に向けて、出来るだけ専門用語を使わずに説明したいと思います。
具体的には基本情報試験技術者試験ドットコムの解説を見ても理解が難しい方向けです。

なお、しっかりとした解説が欲しい方は一番下に記載してある「参考にさせていただいたサイト」の方をお読み下さい。わかりやすく説明してありオススメです。

正規化とは

専門用語を使った説明は難しいので簡単にまとめると、
「整理されていないデータを項目ごとに分割していき、無駄を省いていく」というイメージです。
正式な定義を知りたい方は各自で調べるようにお願いします。

正規化の手順

全く整理されていない「非正規系」から「第一正規系」「第二正規系」「第三正規系」といった順番に正規化していきます。
実際に基本情報試験の過去問を利用しながら解説していきます。

基本情報技術者試験の問題

平成20年秋期問57を使って説明します。
スクリーンショット 2019-12-30 3.46.01.png

非正規系

繰り返しの表記が存在するものは非正規系です。
そのため基本情報試験に出題されているものは非正規系となります。
問題文だけでは少しわかりにくいかもしれないので、実際に適当な値を入れてテーブルを作ってみます。

伝票番号 日付 顧客コード 顧客名 住所 商品コード 単位 数量 単価
123 2019/10/12 D2367 アップル社 東京都 C9876 12 100
C7245 5 500
C6592 2 300
456 2019/10/13 D4352 オレンジ社 大阪府 C9876 4 100
789 2019/10/14 D1869 グレープ社 愛知県 C7245 6 500

伝票番号123のデータは繰り返しのデータを持っているのがわかると思います。

第一正規系

第一正規系は簡単で繰り返しの表記を消去し、全てのデータを一つずつ記載します。
以下が第一正規系のテーブルです。(繰り返しの部分を分けて表示した)

伝票番号 日付 顧客コード 顧客名 住所 商品コード 単位 数量 単価
123 2019/10/12 D2367 アップル社 東京都 C9876 12 100
123 2019/10/12 D2367 アップル社 東京都 C7245 5 500
123 2019/10/12 D2367 アップル社 東京都 C6592 2 300
456 2019/10/13 D4352 オレンジ社 大阪府 C9876 4 100
789 2019/10/14 D1869 グレープ社 愛知県 C7245 6 500

ここで少し主キーについて説明します。
主キーとはデータを識別するためのものです。主キーに対して他のデータは紐づいています。
そのため主キーは重複しないNULLにならないという特性を持ちます
また、主キーは複数存在することもあります。

問題文から伝票番号は主キーということがわかります。
しかし、上の表からでもわかる通り同一の伝票番号が複数存在するので主キーは重複しないに反してしまいます。
つまり主キーは伝票番号以外にも存在するということになります。ここでは商品コードも主キーとなります。

よって第一正規系は以下のようになります。

伝票番号* 日付 顧客コード 顧客名 住所 商品コード* 単位 数量 単価

(*)記号は主キーを示します。

第二正規系

正規系が苦手な方の多くはここで躓くと思います。
第二正規系は主キーに注目します。ここでは伝票番号と商品コードです。

まずは主キーに対して紐づいているデータを探します。
伝票番号は日付、顧客コード、顧客名、住所に紐づいています。
商品コードは問題文にも記載されている通り単価、単位に紐づいています。

ここで新たに伝票番号と商品コードのテーブルを作成します。

伝票番号 日付 顧客コード 顧客名 住所
123 2019/10/12 D2367 アップル社 東京都
456 2019/10/13 D4352 オレンジ社 大阪府
789 2019/10/14 D1869 グレープ社 愛知県
商品コード 単位 単価
C9876 100
C7245 500
C6592 300

第一正規系からこの2つの表の主キー以外の部分を削除すると以下のような表になります。

伝票番号 商品コード 数量
123 C9876 12
123 C7245 5
123 C6592 2
456 C9876 4
789 C7245 6

よって第二正規系は以下のようになります。

伝票番号* 日付 顧客コード 顧客名 住所
商品コード* 単位 単価
伝票番号* 商品コード* 数量

第三正規系

第三正規系は先ほど第二正規系で行った動作を主キー以外にも適用させます。
ここでは顧客コードが顧客名、住所に紐づいています。
よって第二正規系の伝票番号の部分を以下のように分けることができます。

顧客コード 顧客名 住所
D2367 アップル社 東京都
D4352 オレンジ社 大阪府
D1869 グレープ社 愛知県
伝票番号 日付 顧客コード
123 2019/10/12 D2367
456 2019/10/13 D4352
789 2019/10/14 D1869

これにより第三正規系は以下のようになります。

伝票番号* 日付 顧客コード
伝票番号* 商品コード* 数量
商品コード* 単位 単価
顧客コード* 顧客名 住所

おわりに

間違えている箇所や分かりにくい部分は指摘お願いします。

参考にさせて頂いたサイト

データベース ~データの正規化~

正規化の要点を理解する

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?