最終更新日:2026年7月27日
fe fe-technology database
まず結論
関係モデルとは、データを関係(表)として表すデータモデルです。
基本情報技術者試験では、まず次の対応を押さえます。
関係
→ 表
属性
→ 列
組
→ 行
定義域
→ 属性が取り得る値の集合
さらに、選択肢を切るときは次の4点が重要です。
属性の並び順
→ 意味なし
組の並び順
→ 意味なし
属性名
→ 関係内で一意
定義域
→ 複数属性で共有できる
特に、属性名の重複は不可、定義域の重複は可という違いが重要です。
直感的な説明
次のような商品表を考えます。
| 商品番号 | 商品名 | 価格 |
|---|---|---|
| P001 | ノート | 200 |
| P002 | ペン | 150 |
関係モデルでは、この表を次のように見ます。
商品表全体
→ 関係
商品番号・商品名・価格
→ 属性
P001・ノート・200
→ 組
価格が取り得る整数の集合
→ 定義域
見た目では、列は左から右、行は上から下に並んでいます。
しかし、関係モデルでは、並び順そのものには意味がありません。
商品番号、商品名、価格
を、
価格、商品名、商品番号
の順に表示しても、属性名と値の対応が同じなら、関係の意味は変わりません。
定義・仕組み
関係・属性・組・定義域
関係モデルの基本用語は次のとおりです。
| 用語 | 表との対応 | 意味 |
|---|---|---|
| 関係 | 表 | データの集合 |
| 属性 | 列 | データの項目 |
| 組 | 行 | 1件分のデータ |
| 定義域 | データ型・値の範囲 | 属性が取り得る値の集合 |
たとえば、次の属性を考えます。
注文数
在庫数
どちらも整数を取るなら、同じ整数の定義域を使えます。
注文数 → 整数
在庫数 → 整数
したがって、複数の属性が同じ定義域を持っても問題ありません。
属性の並び順に意味はない
関係モデルでは、属性は名前によって識別します。
そのため、列の位置が変わっても、同じ属性名と値の対応を保っていれば、関係の意味は変わりません。
商品番号、商品名、価格
と、
価格、商品番号、商品名
は、表示順が違うだけです。
組の並び順にも意味はない
組は集合として扱われるため、行の順番にも意味はありません。
P001、ノート、200
P002、ペン、150
と、
P002、ペン、150
P001、ノート、200
は、並び順が違うだけで同じ関係です。
SQLで表示順を決めたい場合は、ORDER BYを使います。
SELECT 商品番号, 商品名, 価格
FROM 商品
ORDER BY 価格;
これは関係そのものに順序があるのではなく、表示時に順序を指定しているだけです。
属性名は関係内で一意
同じ関係の中では、属性名は一意でなければなりません。
商品番号
商品名
価格
のように、それぞれを区別できる名前を付けます。
同じ名前の属性が複数あると、どちらの属性を指しているか判断できません。
属性には名前が必要
属性は、属性名によって識別します。
そのため、名前を持たない属性を定義することはできません。
属性
= 属性名 + 定義域
と考えると分かりやすいです。
このテーマは基本情報技術者試験のデータベース分野に含まれます。公式の出題範囲は、IPA:基本情報技術者試験から確認できます。
科目Aでどう出る?
試験では、関係モデルの性質を説明した選択肢から、正しいものを選ばせる形で出題されます。
選択肢を切る判断表
| 選択肢の表現 | 判断 |
|---|---|
| 属性の並び順に意味がある | 誤り |
| 組の並び順に意味がある | 誤り |
| 属性名は関係内で重複できる | 誤り |
| 定義域は属性ごとに異ならなければならない | 誤り |
| 複数属性が同じ定義域を使える | 正しい |
| 属性には名前が必要 | 正しい |
| 同じ組が重複して存在する | 関係モデルでは原則として認めない |
試験中の判断手順
1. 「順序」に意味を持たせていないか確認する
2. 属性名と定義域を混同していないか確認する
3. 属性名は一意、定義域は共有可能と判断する
4. 名前のない属性や重複した属性名は切る
特に、次の違いが頻出です。
属性名の重複
→ 不可
定義域の重複
→ 可
どんな場面で使う?
データベース設計
関係モデルは、業務データを表として整理するときに使います。
たとえば、販売管理では次のような関係を設計します。
顧客
商品
注文
注文明細
それぞれの関係に、必要な属性を定義します。
商品
├─ 商品番号
├─ 商品名
└─ 価格
SQLによるデータ操作
関係モデルで設計された表に対して、SQLを使って検索・追加・更新・削除を行います。
SELECT 商品名, 価格
FROM 商品;
SQLの結果では列や行が順に表示されますが、関係モデル上では、その並び順は本質ではありません。
正規化やキー設計の前提
主キー、外部キー、正規化などを理解するには、関係・属性・組・定義域の考え方が前提になります。
属性
→ 何を管理するか
組
→ 1件分のデータ
主キー
→ 組を一意に識別する属性
よくある誤解・混同
表には列の順番があるので、関係にも順番がある
表示上は列が左から右に並びますが、関係モデルでは属性名によって識別します。
したがって、属性の順番を入れ替えても、関係の意味は変わりません。
行の順番が違えば別の関係になる
組の並び順にも意味はありません。
順番を指定して表示したい場合は、SQLのORDER BYを使います。
同じ定義域を使う属性は作れない
作れます。
注文数:整数
在庫数:整数
のように、複数の属性が同じ定義域を共有できます。
同じ属性名を複数付けられる
同じ関係内では、属性名は一意でなければなりません。
数量
数量
のような定義では、どちらの属性を指しているのか区別できません。
属性名と定義域は同じもの
違います。
価格
→ 属性名
整数
→ 定義域
属性名は項目を識別する名前、定義域は取り得る値の集合です。
まとめ(試験直前用)
- 関係は表、属性は列、組は行、定義域は取り得る値の集合
- 属性と組の並び順には意味がない
- 属性名は関係内で一意にする
- 同じ定義域は複数の属性で共有できる
- 「属性名の重複は不可、定義域の重複は可」で切り分ける