---
title: "関係モデルとは？属性・組・定義域の基本と見分け方【基本情報技術者試験】"
description: "関係モデルの基本を、関係・属性・組・定義域の対応、属性や組の順序、属性名の一意性、定義域の共有という観点から整理し、基本情報技術者試験で選択肢を切る判断軸を解説します。"
last_modified_at: "2026-07-27"
canonical_url: "https://stemtazoo.github.io/fe/relational-model/"
section: "fe"
---

## まず結論

**関係モデル**とは、データを**関係（表）**として表すデータモデルです。

基本情報技術者試験では、まず次の対応を押さえます。

```text
関係
→ 表

属性
→ 列

組
→ 行

定義域
→ 属性が取り得る値の集合
```

さらに、選択肢を切るときは次の4点が重要です。

```text
属性の並び順
→ 意味なし

組の並び順
→ 意味なし

属性名
→ 関係内で一意

定義域
→ 複数属性で共有できる
```

特に、**属性名の重複は不可、定義域の重複は可**という違いが重要です。

---

## 直感的な説明

次のような商品表を考えます。

| 商品番号 | 商品名 | 価格 |
|---|---|---:|
| P001 | ノート | 200 |
| P002 | ペン | 150 |

関係モデルでは、この表を次のように見ます。

```text
商品表全体
→ 関係

商品番号・商品名・価格
→ 属性

P001・ノート・200
→ 組

価格が取り得る整数の集合
→ 定義域
```

見た目では、列は左から右、行は上から下に並んでいます。

しかし、関係モデルでは、並び順そのものには意味がありません。

```text
商品番号、商品名、価格
```

を、

```text
価格、商品名、商品番号
```

の順に表示しても、属性名と値の対応が同じなら、関係の意味は変わりません。

---

## 定義・仕組み

### 関係・属性・組・定義域

関係モデルの基本用語は次のとおりです。

| 用語 | 表との対応 | 意味 |
|---|---|---|
| 関係 | 表 | データの集合 |
| 属性 | 列 | データの項目 |
| 組 | 行 | 1件分のデータ |
| 定義域 | データ型・値の範囲 | 属性が取り得る値の集合 |

たとえば、次の属性を考えます。

```text
注文数
在庫数
```

どちらも整数を取るなら、同じ整数の定義域を使えます。

```text
注文数 → 整数
在庫数 → 整数
```

したがって、**複数の属性が同じ定義域を持っても問題ありません。**

### 属性の並び順に意味はない

関係モデルでは、属性は名前によって識別します。

そのため、列の位置が変わっても、同じ属性名と値の対応を保っていれば、関係の意味は変わりません。

```text
商品番号、商品名、価格
```

と、

```text
価格、商品番号、商品名
```

は、表示順が違うだけです。

### 組の並び順にも意味はない

組は集合として扱われるため、行の順番にも意味はありません。

```text
P001、ノート、200
P002、ペン、150
```

と、

```text
P002、ペン、150
P001、ノート、200
```

は、並び順が違うだけで同じ関係です。

SQLで表示順を決めたい場合は、`ORDER BY`を使います。

```sql
SELECT 商品番号, 商品名, 価格
FROM 商品
ORDER BY 価格;
```

これは関係そのものに順序があるのではなく、**表示時に順序を指定している**だけです。

### 属性名は関係内で一意

同じ関係の中では、属性名は一意でなければなりません。

```text
商品番号
商品名
価格
```

のように、それぞれを区別できる名前を付けます。

同じ名前の属性が複数あると、どちらの属性を指しているか判断できません。

### 属性には名前が必要

属性は、属性名によって識別します。

そのため、名前を持たない属性を定義することはできません。

```text
属性
＝ 属性名 ＋ 定義域
```

と考えると分かりやすいです。

このテーマは基本情報技術者試験のデータベース分野に含まれます。公式の出題範囲は、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

---

## 科目Aでどう出る？

試験では、関係モデルの性質を説明した選択肢から、正しいものを選ばせる形で出題されます。

### 選択肢を切る判断表

| 選択肢の表現 | 判断 |
|---|---|
| 属性の並び順に意味がある | 誤り |
| 組の並び順に意味がある | 誤り |
| 属性名は関係内で重複できる | 誤り |
| 定義域は属性ごとに異ならなければならない | 誤り |
| 複数属性が同じ定義域を使える | 正しい |
| 属性には名前が必要 | 正しい |
| 同じ組が重複して存在する | 関係モデルでは原則として認めない |

### 試験中の判断手順

```text
1. 「順序」に意味を持たせていないか確認する
2. 属性名と定義域を混同していないか確認する
3. 属性名は一意、定義域は共有可能と判断する
4. 名前のない属性や重複した属性名は切る
```

特に、次の違いが頻出です。

```text
属性名の重複
→ 不可

定義域の重複
→ 可
```

---

## どんな場面で使う？

### データベース設計

関係モデルは、業務データを表として整理するときに使います。

たとえば、販売管理では次のような関係を設計します。

```text
顧客
商品
注文
注文明細
```

それぞれの関係に、必要な属性を定義します。

```text
商品
├─ 商品番号
├─ 商品名
└─ 価格
```

### SQLによるデータ操作

関係モデルで設計された表に対して、SQLを使って検索・追加・更新・削除を行います。

```sql
SELECT 商品名, 価格
FROM 商品;
```

SQLの結果では列や行が順に表示されますが、関係モデル上では、その並び順は本質ではありません。

### 正規化やキー設計の前提

主キー、外部キー、正規化などを理解するには、関係・属性・組・定義域の考え方が前提になります。

```text
属性
→ 何を管理するか

組
→ 1件分のデータ

主キー
→ 組を一意に識別する属性
```

---

## よくある誤解・混同

### 表には列の順番があるので、関係にも順番がある

表示上は列が左から右に並びますが、関係モデルでは属性名によって識別します。

したがって、属性の順番を入れ替えても、関係の意味は変わりません。

### 行の順番が違えば別の関係になる

組の並び順にも意味はありません。

順番を指定して表示したい場合は、SQLの`ORDER BY`を使います。

### 同じ定義域を使う属性は作れない

作れます。

```text
注文数：整数
在庫数：整数
```

のように、複数の属性が同じ定義域を共有できます。

### 同じ属性名を複数付けられる

同じ関係内では、属性名は一意でなければなりません。

```text
数量
数量
```

のような定義では、どちらの属性を指しているのか区別できません。

### 属性名と定義域は同じもの

違います。

```text
価格
→ 属性名

整数
→ 定義域
```

属性名は項目を識別する名前、定義域は取り得る値の集合です。

---

## まとめ（試験直前用）

- 関係は表、属性は列、組は行、定義域は取り得る値の集合
- 属性と組の並び順には意味がない
- 属性名は関係内で一意にする
- 同じ定義域は複数の属性で共有できる
- 「属性名の重複は不可、定義域の重複は可」で切り分ける
