問題
問69
ある会社の社員の情報処理技術者試験の受験状況の一部を次に示す。この表を関係データベースで管理するために、二つの表に分割する方法として、適切なものはどれか。ここで、この会社には同姓同名の社員がいるものとする。

[出典:ITパスポート試験 平成29年度春期 問69]
正解
正解は「ア」です。
解説
この問題は、関係データベースの設計における「正規化」という考え方が重要になります。正規化とは、データを重複なく効率的に管理し、矛盾が発生しないように表を分割したり、構造を整理したりする作業です。
提示された表には、一人の社員が複数の試験を受けることで、社員名や生年月日といった社員自身の情報が何度も繰り返されて記載される「冗長性」の問題があります。このような状態では、例えば社員の生年月日を変更したい場合、すべての試験履歴の行を更新しなければならず、更新漏れによるデータ矛盾のリスクが高まります。 正解のアの選択肢では、この問題を解決するために、表を「社員マスタ」と「受験履歴」の二つに分割しています。
- 社員マスタ: 「社員ID、社員名、生年月日」の情報を持ちます。社員一人につき一意の社員IDを割り当て、社員の情報はここに一度だけ登録されます。これにより、社員の個人情報が重複することがなくなります。
- 受験履歴: 「社員ID、試験種別、試験日、合否」の情報を持ちます。どの社員がどの試験を受けたかを示すために、「社員ID」をこの表にも含めます。この社員IDが、社員マスタと受験履歴の表を結びつける役割を果たします。 このように分割することで、社員の個人情報は社員マスタで管理され、試験の履歴は受験履歴で管理されるため、データの重複がなくなり、更新や参照が容易になります。例えば、佐藤花子さんが二つの試験を受けても、社員マスタには佐藤花子さんの情報が一度だけ登録され、受験履歴の方には社員ID「0001」で二つの試験情報が登録される形になります。これにより、データの整合性が保たれ、効率的なデータベース管理が可能となるのです。
イ(社員ID,社員名,生年月日 と 社員名,試験種別,試験日,合否):
「社員名」をキーとして表を結合しようとしていますが、問題文に「同姓同名の社員がいる」とあるため、社員名だけでは個人を特定できず、データが正しく関連付けられません。
ウ(社員ID,社員名,生年月日,試験日 と 社員ID,社員名,試験種別,合否):
社員マスタに「試験日」を含めてしまうと、一人の社員が複数の試験を受けた場合に社員マスタ内でデータが重複することになり、冗長性が解消されません。
エ(社員ID,生年月日,試験日 と 社員ID,社員名,試験種別,合否):
社員マスタに「試験日」を含めることで重複が生じるだけでなく、社員マスタから「社員名」の情報が欠落してしまうため、社員を特定するための情報が不十分になります。
難易度
この問題は、データベースの基本的な概念である「正規化」を理解しているかどうかを問うものです。初学者にとっては、表の分割の考え方や、どの情報を分離すべきかを判断するのが少し難しいかもしれません。しかし、データの重複(冗長性)をなくし、効率的に管理するという正規化の目的を理解すれば、選択肢を絞り込みやすくなります。実際の業務でもデータベースの設計は重要なので、しっかりマスターしておきたい部分です。
用語補足
関係データベース:
データを表形式で管理するデータベースのことです。Excelのシートのように、行と列で構成された表を複数作成し、それらの表を関連付けてデータを扱います。例えば、顧客情報と注文情報を別々の表で管理し、顧客IDで関連付ける、といった使い方をします。
正規化:
データベースの設計において、データの重複をなくし、データの整合性を保ちやすくするための作業です。大きな一つの表を、複数の関連する小さな表に分割することで、データの追加・更新・削除の際に発生する不整合を防ぎます。例えば、社員名簿と資格取得履歴の表を分けることで、社員の情報は社員名簿に一度だけ登録し、資格の情報は資格取得履歴に登録する、といった形です。
主キー:
データベースの表において、その表の各行(レコード)を一意に識別するための列(フィールド)のことです。主キーの値は重複がなく、空であってはいけません。例えば、社員名簿の「社員ID」は、同姓同名の社員がいても特定の社員を識別できるため、主キーとして使われます。
冗長性:
データベース内で同じデータが複数回、重複して存在している状態を指します。冗長性があると、データの更新時にすべての重複箇所を修正する必要があり、修正漏れによるデータの不整合や、記憶容量の無駄につながります。例えば、一人の顧客の住所が複数の注文履歴にそれぞれ記載されている場合、住所が変わったときにすべての注文履歴を修正する必要があるのが冗長性の一例です。
対策
この問題のポイントは、関係データベースの「正規化」の概念を正しく理解していることです。特に、データの重複(冗長性)を排除し、データの整合性を保つという正規化の目的を把握しましょう。今回のケースでは、社員自身の情報(社員ID、社員名、生年月日)と、試験の履歴情報(試験種別、試験日、合否)を分けて管理することが重要です。社員IDを共通の項目として両方の表に持たせることで、それぞれの表を効率的に関連付けられるようになります。過去問を繰り返し解き、正規化のパターンを身につけることが対策となります。

