ITパスポートのデータベース|主キー・外部キー・正規化の基本
データベースの過去問は、「行を識別するキー」と「表を結び付けるキー」を区別するところから始めます。主キー・外部キーと、データの重複を整理する正規化を確認しましょう。
用語を覚えたら、末尾の確認問題を解いてみてください。重複・NULL・参照先の存在という条件を、問題文に合わせて判断します。
1. 関係データベースの基本構造と用語
用語 | 別名 | 意味と具体例 |
|---|---|---|
表(テーブル) | リレーション | 行と列で構成されるデータの集合(例:社員テーブル、注文テーブル) |
行(レコード) | 組(タプル) | 1件分のまとまったデータ(例:社員AさんのID、氏名、部署名) |
列(カラム) | 属性(アトリビュート) | データの項目名(例:社員番号、氏名、電話番号) |
2. キーの役割と整合性制約
キー | 意味・制約 | 例 |
|---|---|---|
主キー | 各行を一意に識別する列、または列の組合せ。重複とNULLを認めない | 社員番号。複数列を組み合わせて主キーにする場合もある |
外部キー | 別の表、または同じ表の主キーや一意なキーを参照する列・列の組合せ | 注文表の顧客ID。NULLを禁止するかは別の制約で決める |
複合キー | 複数の列の組合せで行を識別するキー | 「注文番号+枝番」「年度+学籍番号」 |
3. 正規化:重複と更新時の矛盾を減らす
正規化を行わない非正規形の表では、「社員の部署異動時に複数箇所を書き換えなければならず、矛盾が生じる(更新時異常)」などの問題が発生します。
段階 | 基本的な操作 | ねらい |
|---|---|---|
第1正規形 | 繰り返し項目を整理し、各セルを単一の値にする | 表の各値を個別に扱えるようにする |
第2正規形 | 第1正規形から、キーの一部だけに依存する非キー項目を分離する | 部分関数従属による重複を減らす |
第3正規形 | 第2正規形から、非キー項目を介してキーに依存する項目を分離する | 推移的関数従属による重複を減らす |
4. 【実戦演習 問1】主キーの制約条件
【問題】関係データベースにおいて、テーブルの「主キー(Primary Key)」に設定された列が満たすべき性質として、最も適切なものはどれか。
ア:テーブル内で値が重複してはならないが、値が未入力(NULL)であることは許可される。
イ:値が未入力(NULL)であってはならないが、他の行と同じ値が重複して存在することは許可される。
ウ:テーブル内のすべての行で値が一意(重複なし)であり、かつ値が未入力(NULL)であってはならない。
エ:他のテーブルに存在する主キーと同じ値を持っていなければならない。
【正解】ウ
解説
ア:誤り。主キーはNULLを絶対に許可しません(NOT NULL制約)。
イ:誤り。主キーは重複を絶対に許可しません(一意性制約)。
ウ:正解。主キーは「一意性制約(Unique)」と「非空制約(NOT NULL)」の両方を同時に満たす必要があります。
エ:誤り。これは外部キーの「参照整合性制約」の説明です。
5. 【実戦演習 問2】データベースの正規化の目的
【問題】関係データベースの設計において、表の「正規化」を行う主な目的として、最も適切なものはどれか。
ア:データの重複を排除し、データの追加・更新・削除に伴う不整合(矛盾)の発生を防止する。
イ:表の数を最小限の1つに統合することで、検索処理(SELECT文)の実行速度を極限まで高める。
ウ:ハードディスクの故障時に備えて、同一のデータを複数の表に自動バックアップする。
エ:データベース管理システム(DBMS)のメモリ使用量をゼロにする。
【正解】ア
解説
ア:正解。正規化の本質的な目的は「データの冗長性(重複)の排除」と「更新・削除時のデータの不整合(更新時異常)の防止」です。
イ:誤り。正規化を行うと表が分割されるため、検索時に結合(JOIN)が必要になり、むしろ検索速度が若干低下する場合があります(そのため性能向上のためにあえて非正規化することもあります)。
ウ:誤り。レプリケーションやバックアップの説明です。
エ:誤り。DBMSのメモリ使用量をゼロにすることはできません。
出典と仕様を確認する
IPA:ITパスポート試験シラバス Ver.6.5
PostgreSQL:主キー・外部キーなどの制約
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る