今回は、基本情報技術者試験のデータベースに関する過去問を取り上げ、正規化について詳しく解説します。データベースはシステム開発やアプリケーション構築において非常に重要な分野です。特に正規化の理解は、効率的なデータベース設計に欠かせません!
問題
「次のリストは、あるテーブルのデータの一部である。このテーブルを第二正規形にするためには、どの属性を新しいテーブルに分けるべきか?」
| 注文ID | 商品ID | 商品名 | 顧客ID | 顧客名 | 注文日 | 個数 | 単価 |
|---|---|---|---|---|---|---|---|
| 001 | 101 | ペン | C001 | 山田 | 2023/05/01 | 10 | 100 |
| 002 | 102 | ノート | C002 | 佐藤 | 2023/05/02 | 5 | 200 |
| 003 | 101 | ペン | C003 | 鈴木 | 2023/05/03 | 8 | 100 |
- ア:商品ID、商品名、単価
- イ:顧客ID、顧客名
- ウ:注文ID、注文日
- エ:個数、単価
正規化とは?
正規化とは、データベース設計の過程で、データの冗長性を削減し、一貫性を保つための手法です。データを効率的に管理し、更新や削除の際に生じる異常(更新異常、挿入異常、削除異常)を防ぐ目的があります。
正規化は複数の段階に分かれており、第一正規形 (1NF)、第二正規形 (2NF)、**第三正規形 (3NF)**と進むに従って、データがさらに整理されます。
第二正規形 (2NF) とは?
まず、第二正規形 (2NF) になるためには、データが**第一正規形 (1NF)**になっていることが前提です。1NFでは、各フィールドが単一の値を持つようにデータを整理します。
2NFでは、部分関数従属を排除します。部分関数従属とは、テーブルの一部の属性が主キー全体ではなく、主キーの一部に依存する状態のことです。これを解消するために、依存関係のあるデータを別のテーブルに分けます。
問題の解説
今回のテーブルには、注文IDと商品IDという2つの属性が主キーとなる可能性があります。商品IDや商品名、単価は商品IDに依存していますが、注文に依存しているわけではありません。つまり、商品情報を注文情報から独立させて管理するべきです。
各選択肢を見てみましょう:
ア:商品ID、商品名、単価
- 商品IDに依存する属性なので、別のテーブルに分けるべきです。よって、これが正解です。
イ:顧客ID、顧客名
- 顧客情報は注文IDに依存しないため、顧客テーブルとして独立させることも可能ですが、今回は部分関数従属の観点からは重要ではありません。
ウ:注文ID、注文日
- これらは主キーであり、分離する必要はありません。
エ:個数、単価
- 個数は注文に依存しているため、分離の対象ではありません。単価は商品IDに依存するため、分ける対象に含まれますが、個数とは関係ありません。
正解
この問題の正解は、ア:商品ID、商品名、単価 です。
正規化のメリット
正規化を行うことで、データの冗長性を削減し、データの更新や削除の際に一貫性を保つことができます。また、データベースのパフォーマンス向上にも寄与し、大規模なデータでも効率的に扱えるようになります。
一方で、正規化を進めすぎると、テーブルが増えて複雑化するため、適度なバランスを保つことも重要です。
データベース設計における正規化の実務例
例えば、オンラインショッピングのデータベースを考えてみましょう。顧客が商品を注文する際に、もし商品情報(商品名や価格など)を毎回注文テーブルに書き込んでいたら、データが重複し、管理が煩雑になります。これを避けるために、商品テーブルと注文テーブルに分けて管理し、商品のIDで結びつけることで冗長性を削減します。
まとめ
今回の問題では、正規化の第二正規形に関する知識を元に解説しました。データベース設計は、システム開発や業務効率化の基盤となる重要な要素です。正規化の基本的な概念を理解することで、より効率的で保守しやすいデータベースを設計できるようになります。
次回は、第三正規形やその他のデータベース設計のポイントにも挑戦してみましょう!

コメント