スポンサーリンク
正規化とは
正規化とは複数テーブルに、同一情報が重複して存在することがないように最適化
することです。
非正規形から第1正規形~第5正規形までの段階が存在し、データベースの重複や矛盾を取り除くことで正規化の段階が上がります。
非正規形
テーブルの行に重複がある状態のことです。
例:非正規形のテーブル
注文テーブル
注文ID | 注文日 | 顧客ID | 顧客名 | 商品ID | 商品名 | 価格 | 数量 | 商品ID | 商品名 | 価格 | 数量 |
---|---|---|---|---|---|---|---|---|---|---|---|
001 | 7/1 | 001 | 田中太郎 | 001 | みかん | 100 | 3 | 002 | りんご | 150 | 2 |
002 | 7/2 | 002 | 佐藤次郎 | 002 | りんご | 150 | 10 | 003 | バナナ | 200 | 6 |
003 | 7/3 | 002 | 佐藤次郎 | 003 | バナナ | 200 | 5 | - | - | - | - |
第1正規系
非正規形からテーブル行の繰り返しを取り除いた状態のことです。
例では商品ID,商品名,価格,数量
の重複を分割しています。
例:第1正規形のテーブル
注文テーブル
注文ID | 注文日 | 顧客ID | 顧客名 | 商品ID | 商品名 | 価格 | 数量 |
---|---|---|---|---|---|---|---|
001 | 2024/7/1 | 001 | 田中太郎 | 001 | みかん | 100 | 3 |
001 | 2024/7/1 | 001 | 田中太郎 | 002 | りんご | 150 | 2 |
002 | 2024/7/2 | 002 | 佐藤次郎 | 002 | りんご | 150 | 10 |
002 | 2024/7/2 | 002 | 佐藤次郎 | 003 | バナナ | 200 | 6 |
003 | 2024/7/3 | 002 | 佐藤次郎 | 003 | バナナ | 200 | 5 |
第2正規系
第1正規形のテーブルから部分関数従属をなくした状態のことです。
部分関数従属とは、主キーが複数あるテーブルにおいて、一部のキーだけで決定できる項目のことです。
第1正規系の例では注文ID
と商品ID
でレコードが一意になる複合主キーです。
注文ID
のみで注文日,顧客ID,顧客名
を決定できて、商品ID
のみで商品名,価格
が決まるのでテーブルを分離します。
例:第2正規形のテーブル
注文テーブル
注文ID | 注文日 | 顧客ID | 顧客名 |
---|---|---|---|
001 | 2024/7/1 | 001 | 田中太郎 |
002 | 2024/7/2 | 002 | 佐藤次郎 |
003 | 2024/7/3 | 002 | 佐藤次郎 |
注文商品テーブル
注文ID | 商品ID | 数量 |
---|---|---|
001 | 001 | 3 |
001 | 002 | 2 |
002 | 002 | 10 |
002 | 003 | 6 |
003 | 003 | 5 |
商品テーブル
商品ID | 商品名 | 価格 |
---|---|---|
001 | みかん | 100 |
002 | りんご | 150 |
003 | バナナ | 200 |
第3正規系
第2正規形のテーブルから推移的関数従属をなくした状態のことです。
推移関数従属性とは、テーブル内の一部項目が主キーでない項目によって決定されることです。
例では顧客ID
によって、顧客名
が決定されるため、別表に移します。
例:第3正規形
注文テーブル
注文ID | 発注日 | 顧客ID |
---|---|---|
001 | 2024/7/1 | 001 |
002 | 2024/7/2 | 002 |
003 | 2024/7/3 | 002 |
顧客テーブル
顧客ID | 顧客名 |
---|---|
001 | 田中太郎 |
002 | 佐藤次郎 |
注文商品テーブル
注文ID | 商品ID | 数量 |
---|---|---|
001 | 001 | 3 |
001 | 002 | 2 |
002 | 002 | 10 |
002 | 003 | 6 |
003 | 003 | 5 |
商品テーブル
商品ID | 商品名 | 価格 |
---|---|---|
001 | みかん | 100 |
002 | りんご | 150 |
003 | バナナ | 200 |
正規化はどこまで行うべきか
過剰な正規化は、データ管理効率が悪くなるため、第3正規形まで正規化を行うことが一般的です。
基本情報技術者試験の過去問
基本情報の過去問を解いて、理解度を深めましょう。
基本情報技術者試験ドットコムのリンクを載せておきます。
基本情報技術者平成20年秋期 午前問57
基本情報技術者平成21年春期 午前問32
基本情報技術者平成22年春期 午前問30
まとめ
- 非正規系は、テーブルの
行に重複がある状態
のこと。 - 第1正規系は、非正規形から
テーブル行の繰り返しを取り除いた状態
のこと。 - 第2正規系は、第1正規形のテーブルから
部分関数従属を除いた状態
のこと。- 部分関数従属は、主キーが複数あるテーブルにおいて、
一部のキーだけで決定できる項目
のこと。
- 部分関数従属は、主キーが複数あるテーブルにおいて、
- 第3正規系は、第2正規形のテーブルから
推移的関数従属
を除いた状態のこと。- 推移的関数従属は、テーブル内の一部の項目が、
主キーでない項目によって決定される
こと。
- 推移的関数従属は、テーブル内の一部の項目が、
以上で本記事の解説を終わります。
よいITライフを!