1
0

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 3 years have passed since last update.

データベースの正規化(情報処理試験によく出るやつ)

Posted at

DBの正規化とは

DBで扱うデータの冗長性を排除し、独立性を高めることです。これにより、DBのメンテナンスが容易になります。
しかし、きちんとしたルールに基づいて正規化を行わなければ整合性や一貫性を確保できなくなります。

正規形のざっくりとした説明

・非正規形
1レコード内に繰り返し項目を持っている。データベースに格納して、SQLで操作して...という処理ができない。

・第1正規形
キーを設定し、テーブルの繰り返し項目を取り除く。

・第2正規形
部分関数従属性を別テーブルに分離。

・第3正規形
推移関数従属性を別テーブルに分離。

非正規形

以下のような伝票テーブルがあったとします。(マークダウンで書けなかったので、Excelで作ったやつのスクショです。)
1レコードの中に商品コード、商品名、単価、数量が複数入力されています。これが繰り返し項目です。
1レコードの中にデータが混在しているため、MysqlなどのRDBMSではこのテーブルを管理することができません。
スクリーンショット 2021-03-07 23.15.07.png

第1正規形

繰り返し項目を排除し、伝票番号と商品コードごとに1レコードとします。これが第1正規形です。
レコード数は多くなりますが、伝票番号と商品コードを主キーとして伝票を一意に表すことができます。

伝票番号 担当者ID 担当者 商品コード 商品名 単価 数量
1 001 田中 A1 10000 2
1 001 田中 B1 椅子 20000 3
1 001 田中 C1 本棚 5000 4
2 002 鈴木 A1 10000 2
2 002 鈴木 D1 テレビ 50000 1

第2正規形

部分従属性を無くすことで、テーブルを第2正規形にすることができます。
部分従属性とは、主キー(今回の場合は伝票番号と商品ID)の一部からレコードを特定できる事です。
第1正規形の伝票テーブルを見ると、商品IDから商品は特定できることがわかります。
そのため、伝票テーブルは以下のように伝票テーブルと商品テーブルに分けることができます。

・伝票テーブル(商品名カラムと単価カラムは商品テーブルに分離)

伝票番号 担当者ID 担当者 商品コード 数量
1 001 田中 A1 2
1 001 田中 B1 3
1 001 田中 C1 4
2 002 鈴木 A1 2
2 002 鈴木 D1 1

・商品テーブル(New!)

商品コード 商品名 単価
A1 10000
B1 椅子 20000
C1 本棚 5000
A1 10000
D1 テレビ 50000

第3正規形

推移的従属性を無くすことで、テーブルを第3正規形にすることができます。
推移的従属性とは、主キー以外からレコードを特定できる事です。
第2正規形の伝票テーブルを見ると、担当者IDから担当者は特定できることがわかります。
そのため、第3正規化を行うことで、以下のように伝票テーブル、商品テーブル、社員テーブルに分けることができます。

・伝票テーブル(担当者カラムは社員テーブルに分離)

伝票番号 担当者ID 商品コード 数量
1 001 A1 2
1 001 B1 3
1 001 C1 4
2 002 A1 2
2 002 D1 1

・社員テーブル(New!)

担当者ID 担当者
001 田中
001 田中
001 田中
002 鈴木
002 鈴木

・商品テーブル

商品コード 商品名 単価
A1 10000
B1 椅子 20000
C1 本棚 5000
A1 10000
D1 テレビ 50000
1
0
1

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?