データベーススペシャリスト試験の午後問題、特に最初の鬼門となるのが関係スキーマの穴埋めとリレーションシップの記入です。ここでつまずいてしまうと、その後のSQL作成問題やトランザクション問題にも影響が出てしまいます。
でも安心してください。私なりに、この問題を高精度かつスピーディーに解くための『鉄則』を、具体的な思考プロセスとともにお伝えします。この記事が、これから受験する方の一助になれば幸いです。
1. はじめに:関係スキーマとリレーション、なぜここで差がつくのか?
データベーススペシャリスト試験において、関係スキーマとリレーションはまさにデータベース設計の「肝」です。現実世界の複雑な情報を、データベースという形で論理的に表現する設計図となる部分だからだと考えます。
午後問題の序盤でこの分野が問われるのは、単なる知識だけでなく、業務要件を正確に読み解き、それを論理的にデータベース構造へ落とし込む力が試されているからです。ここでのミスは後続の問題にも波及します。
これから解説する「解法の鉄則」を身につけることで、皆さんはこの最重要パートを自信を持ってクリアできるようになりますよ。
2. 押さえておきたい基本:関係スキーマとリレーションの基礎知識
具体的な解法に入る前に、まずは基本をしっかり押さえておきましょう。
関係スキーマの構成要素
関係スキーマは、テーブルの設計図です。主に以下の要素で構成されます。
- テーブル名: そのテーブルが何の情報を管理するのかを示す名前。
- 属性名(列名): テーブル内の各項目。例:
顧客ID
、商品名
、価格
。 - 主キー(Primary Key: PK): そのテーブルの各行を一意に識別するための属性(または属性の集合)。
PK
と表記されます。数学でいう「一意性」の保証ですね。 - 外部キー(Foreign Key: FK): 他のテーブルの主キーを参照する属性。テーブル間の関連性を示し、データの「参照整合性」を保ちます。
FK
と表記されます。
リレーションシップの種類
テーブル間の関連性(リレーションシップ)は、主に以下の3種類があります。これらはER図(エンティティ関係図)で表現されることが多く、図の記号(鳥の足記法など)を正確に読み解くことが重要です。
- 1対1: 片方のテーブルの1つのレコードが、もう一方のテーブルの1つのレコードにのみ関連する場合。
- 1対多: 片方のテーブルの1つのレコードが、もう一方のテーブルの複数のレコードに関連する場合。最もよく使われる関係です。
- 多対多: 片方のテーブルの複数のレコードが、もう一方のテーブルの複数のレコードに関連する場合。この関係は、通常中間テーブル(関連エンティティ)を介して1対多の関係に分解されます。
ER図を読む際は、線に付いている記号(棒線、丸、鳥の足など)でカーディナリティ(多重度)とオプショナリティ(任意性)を正確に読み取ることが不可欠です。
3. 【鉄則】関係スキーマとリレーションを攻略する『解く順番』
ここからが本題です。闇雲に解き始めるのではなく、以下のステップを意識することで、効率的かつ正確に解答を導き出せます。
ステップ⓪:問題文の徹底的な読み込みとエンティティの把握
なぜこのステップが最初なのか?それは、問題文には、関係スキーマを埋めるためのすべてのヒントが隠されているからです。焦って穴埋めから始める前に、まずは「何がエンティティ(実体)で、それぞれがどのような情報を持ち、どのような業務ルールがあるのか」を正確に把握することが、その後の作業の精度を決定づけます。
具体的な読み込み方:
- 名詞(エンティティ候補)と動詞(リレーションシップ候補)に注目しましょう。例えば、「顧客が商品を注文する」という文から、「顧客」「商品」「注文」がエンティティ候補、「注文する」がリレーションシップ候補と推測できます。
- 「〜は〜を持つ」「〜と〜は関連する」といった表現から、属性やリレーションシップのヒントを得ます。
- 業務上の制約(例:「注文は必ず顧客に紐づく」「商品は一意のコードを持つ」など)をリストアップしましょう。これが主キーや外部キー、あるいはNOT NULL制約などの重要なヒントになります。
ステップ①:既に記載のある外部キーからリレーションを特定・記入する
問題文で既に提示されている関係スキーマの中に、一部の外部キー(FK)が記載されていることがあります。なぜこのステップが最初なのか? 既に記載されている外部キーは、そのテーブルが「どのテーブルを参照しているのか」を明確に示しています。これは、テーブル間の親子関係(リレーションシップ)を特定する上で最も明確な手掛かりとなるため、まずここから埋めることで、全体の構造を把握しやすくなります。
ポイント:
- 外部キーが「主キーでもある」ケースに特に注意してください。これは多対多のリレーションシップを解消するために作られた中間テーブルの複合主キーなどでよく見られます。この場合、単なる参照関係だけでなく、その外部キーがテーブル自体の識別子の一部になっていることを意識しましょう。
- 外部キーが示すリレーションシップの方向性(親から子へ)とカーディナリティ(1対多など)を正確に判断し、ER図に記入します。
ステップ②:関係スキーマの穴埋めを行う
ステップ①でテーブル間の関係性が大まかに見えてきたところで、今度は各テーブルの内部構造(属性)に焦点を当てます。問題文から読み取れる情報と、データベースの正規化の知識を組み合わせて、適切な属性を配置していきます。
(ⅰ)問題文に明示的に記載があるパターン
解説: 問題文中に「〜テーブルには、〜という項目がある」「〜の情報を管理する」のように、直接的に属性名やその役割が記述されているケースです。
コツ: 記述された内容を正確に関係スキーマに落とし込みます。属性のデータ型や制約(NOT NULLなど)も可能であれば読み取り、メモしておきましょう。
過去問例: (平成30年度午後Ⅰ問1)
問題文から、設置事業所の情報を読み取ります。
設置事業所は以下のように5つの属性を持つことが分かります。
設置事業所は、顧客コードと設置事業所コードで識別し、名称、住所、その住所を基にした地域コードを登録する。
関係スキーマにて「設置事業所」スキーマを見ると、以下のようになっています。
設置事業所(e,設置事業所コード,設置事業所名,設置事業所住所,f)
eとfにはそれぞれ、顧客コードと地域コードが入ることが分かります。
(ⅱ)明示的な記載がなく、業務内容から読み取る必要があるパターン
解説: 問題文に直接的な記述はないものの、業務フローやシステムの要件から「この情報が必要だろう」と推測して属性を補完するケースです。
コツ:
- 正規化の視点: データの冗長性を排除し、一貫性を保つために、どのエンティティにどの属性を配置すべきかを考えます(例:顧客名は顧客テーブルに、商品名は商品テーブルに)。
- 業務要件との照合: その属性が、そのテーブルのエンティティにとって本質的な情報であるか、業務上必要不可欠な情報であるかを判断します。
過去問例:令和3年度 午後Ⅰ 問1
「支払」スキーマの穴埋めが、以下のように出題されています。
支払(レシート番号, 会員コード, a, b, 支払日時, 利用ポイント)
正解は以下の通りです:
a:加盟企業コード
b:店舗コード
一見すると、次のような説明文があれば、すぐに補完できそうです。
「支払はレシート番号で識別し、会員コード、加盟企業コード、店舗コード、日時、利用ポイントを記録する。」
しかし残念ながら、問題文にはそのような直接的な記載はありません。
では、どうやってこの2つ(a, b)を推定するのでしょうか?
「支払」にはすでに「誰が(会員コード)」「いつ(支払日時)支払ったか」という情報が含まれています。
ここで発想を少し広げて、他に支払に必要そうな情報を考えてみましょう。
- いくら払ったの?
- どこで払ったの?
このうち「いくら払ったのか」は、「支払方法明細」スキーマで管理されているため、ここでは不要です。
つまり残るのは:
どこで払ったのか?
これを記録するために、加盟企業コードと店舗コードが必要となるのです。
ステップ③:関係スキーマの穴埋めをしながら、残りのリレーションを記入する
ステップ②で主キーや外部キーが新たに特定された場合、それらが示すリレーションシップをここで最終的にER図に反映させます。ステップ①で埋めきれなかったリレーションシップ(特に多対多を解消した中間テーブルと元のテーブルとの関係など)がここで明確になることが多いです。
ポイント:
- 新たに特定した主キーと外部キーのペアを見落とさないようにしましょう。
- リレーションシップのカーディナリティとオプショナリティを再度確認し、ER図の表記に誤りがないか最終チェックしてください。
4. 最終チェックと見直しの重要性
上記のステップで解答を記入したら、必ず以下の観点で最終チェックを行いましょう。
- 記入漏れ、誤記がないか: 属性名やキーの表記ミスがないか、一字一句確認します。
- 業務要件とER図、関係スキーマが矛盾していないか: 問題文に記載された業務ルールが、設計したスキーマで実現可能か、論理的に破綻していないかを確認します。
5. まとめ:精度とスピードを両立する解法
今回の記事では、データベーススペシャリスト試験の午後問題で頻出する「関係スキーマの穴埋めとリレーション記入」を攻略するための『解く順番』を解説しました。
- ステップ⓪:問題文を徹底的に読み込み、エンティティと業務ルールを把握する。
- ステップ①:既に記載のある外部キーからリレーションを特定し、ER図に記入する。
- ステップ②:問題文の明示的な記述や業務要件から推測し、関係スキーマの穴埋めを行う。
- ステップ③:穴埋めをしながら、新たに特定された主キー・外部キーから残りのリレーションを記入する。
この「鉄則」を意識し、繰り返し過去問を解くことで、皆さんの解答の精度とスピードは飛躍的に向上するはずです。