データの設計
データの設計とは
Section titled “データの設計とは”データベースを作るとき、いきなり表(テーブル)を作り始めるわけではありません。まず「どのようなデータを、どのような構造で管理するか」を設計する工程が必要です。これがデータの設計です。
データの設計では、現実世界の情報(たとえば「顧客」「商品」「注文」など)を整理し、データベース上の表として表現できる形に落とし込みます。この工程をしっかり行うことで、データの重複や矛盾が少ない、使いやすいデータベースが出来上がります。
E-R図(Entity-Relationship Diagram)
Section titled “E-R図(Entity-Relationship Diagram)”データの設計を行う際に、データ同士の関係を視覚的に整理するために使われるのがE-R図(イーアールず)です。E-R図では、次の2つの要素を使ってデータの構造を表現します。
- エンティティ(Entity:実体):管理したい対象のこと。四角形で表します。例:「顧客」「商品」「注文」
- リレーションシップ(Relationship:関連):エンティティ同士の関係のこと。線や矢印で表します。例:「顧客が商品を注文する」
エンティティ間の関係には、次のような種類があります。
| 関係の種類 | 意味 | 具体例 |
|---|---|---|
| 1対1 | 一方の1件に対し、もう一方も1件 | 社員1人に対して社員証1枚 |
| 1対多 | 一方の1件に対し、もう一方が複数件 | 出版社1社に対して書籍が多数 |
| 多対多 | 両方がそれぞれ複数件 | 学生と講義(1人の学生が複数講義を受け、1つの講義に複数学生が参加) |
ITパスポート試験では、とくに1対多の関係がよく出題されます。たとえば「1つの出版社が複数の本を出版する」という関係は、出版社側が「1」、本側が「多」の1対多の関係です。
erDiagram
出版社 ||--o{ 本 : "出版する"
出版社 {
string 出版社ID
string 出版社名
string 所在地
}
本 {
string 書籍ID
string タイトル
string 著者名
string 出版社ID
}
classDef base fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#333;
classDef primary fill:#eff6ff,stroke:#2563eb,stroke-width:2px,color:#1e40af;
classDef alert fill:#fef2f2,stroke:#dc2626,stroke-width:2px,color:#991b1b;
試験で出るポイント
E-R図では「どのエンティティとどのエンティティが、どのような関係(1対1、1対多、多対多)にあるか」を読み取る問題が出ます。問題文の業務ルール(例:「1つの出版社は複数の本を出版する」)から関係の種類を判断できるようにしましょう。
テーブル(表)の構造 ── フィールド・レコード・テーブル
Section titled “テーブル(表)の構造 ── フィールド・レコード・テーブル”E-R図で整理したデータの構造を、実際のデータベースではテーブル(表)として表現します。テーブルは、Excelの表のようなイメージで理解するとわかりやすいでしょう。
テーブルを構成する要素は、次の3つです。
| 用語 | 意味 | Excelとの対比 |
|---|---|---|
| テーブル(表) | データを格納する表全体 | シート全体 |
| フィールド(項目・列) | データの種類を表す縦の列 | 列(A列、B列…) |
| レコード(行) | 1件分のデータを表す横の行 | 行(1行、2行…) |
たとえば「従業員テーブル」は次のようになります。
| 従業員番号 | 従業員名 | 部署 | 入社年 |
|---|---|---|---|
| E001 | 山田太郎 | 営業部 | 2020 |
| E002 | 鈴木花子 | 開発部 | 2021 |
| E003 | 佐藤一郎 | 営業部 | 2022 |
この例では、「従業員番号」「従業員名」「部署」「入社年」の4つがフィールドであり、山田太郎さんの情報が入っている横1行が1つのレコードです。そしてこの表全体が1つのテーブルです。
試験で出るポイント
「関係データベースの構成要素は何か」という問題が出ます。「テーブル(表)」「レコード(行)」「フィールド(列・項目)」の3つの用語と意味をセットで覚えましょう。
テーブルの中で、各レコードを一意に識別する(他のレコードと重複しない値で区別する)ためのフィールドを主キーと呼びます。
先ほどの従業員テーブルでは、「従業員番号」が主キーになります。なぜなら、従業員番号は社員ごとに異なる値が割り当てられるため、どのレコードかを確実に特定できるからです。
一方、「従業員名」は主キーにできません。同姓同名の従業員がいる可能性があり、一意に識別できないためです。
主キーには、次のルールがあります。
- 値が重複してはならない(同じ値のレコードが2つ以上存在しない)
- NULL(空の値)を入れてはならない(必ず値が入っている必要がある)
- 複数のフィールドを組み合わせて主キーにできる(これを複合主キーと呼びます)
複合主キーの例を見てみましょう。受講管理テーブルで「学生ID」と「講義ID」の組み合わせを主キーにすれば、「どの学生がどの講義を受けたか」を一意に識別できます。
| 学生ID | 講義ID | 成績 |
|---|---|---|
| S001 | L01 | A |
| S001 | L02 | B |
| S002 | L01 | A |
この場合、「学生ID」だけでは重複(S001が2つ)があり一意に識別できませんが、「学生ID + 講義ID」の組み合わせなら各レコードを一意に識別できます。
試験で出るポイント
主キーはこの分野で最も出題される用語です。「レコードを一意に識別する」「値の重複不可」「NULL不可」「複数フィールドで構成できる(複合主キー)」の4点を確実に押さえましょう。なお、主キーは数値である必要はなく、文字列でも構いません。また、インデックスが設定されているフィールドと主キーが重なることもあります。
外部キーとは、ある表のフィールドが、別の表の主キーを参照しているときの、そのフィールドのことです。外部キーを使うことで、複数のテーブル同士を関連付けることができます。
たとえば、次の2つのテーブルを考えます。
部署テーブル
| 部署ID | 部署名 |
|---|---|
| D01 | 営業部 |
| D02 | 開発部 |
従業員テーブル
| 従業員番号 | 従業員名 | 部署ID |
|---|---|---|
| E001 | 山田太郎 | D01 |
| E002 | 鈴木花子 | D02 |
従業員テーブルの「部署ID」は、部署テーブルの主キー「部署ID」を参照しています。このとき、従業員テーブルの「部署ID」が外部キーです。
外部キーにより、従業員テーブルの部署IDには、部署テーブルに存在する値しか入れられなくなります。これによってデータの整合性(つじつまが合っていること)が保たれます。
試験で出るポイント
主キーと外部キーの違いを混同しないようにしましょう。主キーは「自分の表のレコードを一意に識別する」もの、外部キーは「他の表の主キーを参照して表同士を関連付ける」ものです。
データベースで使うコード(商品コード、顧客コードなど)をどのように設計するかも、データの設計の重要な工程です。これをコード設計と呼びます。
コードとは、データを体系的に管理するために付与する識別用の番号や記号のことです。たとえば、商品コード「A-1001」の「A」がカテゴリ(食品)、「1001」が連番を表すように、コードに意味を持たせることで、データの管理や検索がしやすくなります。
コード設計で考慮すべき主なポイントは次のとおりです。
- 一意性:同じコードが2つ以上のデータに付かないようにする
- 拡張性:将来データが増えても対応できる桁数を確保する
- 体系性:コードの構造にルールを設けて、分類や検索に役立てる
身近な例では、郵便番号(例:100-0001)や電話番号も一種のコードです。桁数やルールがあらかじめ決められているため、全国の住所や電話を一意に識別できます。
インデックス
Section titled “インデックス”データベースのテーブルにデータが大量に蓄積されると、目的のデータを見つけるのに時間がかかるようになります。この検索を高速化するための仕組みがインデックス(索引)です。
インデックスは、本の巻末にある「索引」と同じ考え方です。本の中から特定のキーワードを探すとき、最初のページから1ページずつめくっていくのは大変です。しかし巻末の索引を見れば、「そのキーワードが何ページにあるか」がすぐにわかります。
データベースのインデックスも同じで、特定のフィールドに対してインデックスを作成しておくと、そのフィールドの値を条件にした検索が高速になります。たとえば、100万件のレコードがある顧客テーブルで「顧客名」にインデックスを作成しておけば、名前で検索するときの処理速度が大幅に向上します。
ただし、インデックスを作りすぎると、データの追加・更新時にインデックスも更新する必要があるため、逆に処理が遅くなることもあります。よく検索に使うフィールドに対して適切に設定することが大切です。
試験で出るポイント
「データベースの検索を高速にするために設定する情報は何か」と問われたら、答えはインデックスです。本の索引にたとえて仕組みを理解しておきましょう。2025年の試験で出題されており、今後も出題が見込まれます。
まとめ ── データの設計で押さえるべき用語
Section titled “まとめ ── データの設計で押さえるべき用語”| 用語 | 意味 |
|---|---|
| E-R図 | エンティティ(実体)とリレーションシップ(関連)でデータの構造を表す図 |
| テーブル(表) | データを格納する表 |
| フィールド(項目) | データの種類を表す列 |
| レコード | 1件分のデータを表す行 |
| 主キー | レコードを一意に識別するフィールド。重複不可、NULL不可 |
| 外部キー | 他の表の主キーを参照し、表同士を関連付けるフィールド |
| コード設計 | データを管理するための識別番号・記号の設計 |
| インデックス | 検索を高速化するための索引情報 |
過去問で実力チェック
Section titled “過去問で実力チェック”過去問に挑戦
Q. 関係データベースにおいて,主キーを設定する理由はどれか。
- ア 算術演算の対象とならないことが明確になる。
- イ 主キーを設定した列が検索できるようになる。
- ウ 他の表からの参照を防止できるようになる。
- エ 表中のレコードを一意に識別できるようになる。
解答(令和元年)
正解: エ
Q. 条件①~④を全て満たすとき,出版社と著者と本の関係を示すE-R図はどれか。ここで,E-R図の表記法は次のとおりとする。
[表記法]
[ a ]→[ b ] aとbが,1対多の関係であることを表す。
[条件]
① 出版社は,複数の著者と契約している。
② 著者は,一つの出版社とだけ契約している。
③ 著者は,複数の本を書いている。
④ 1冊の本は,1人の著者が書いている。
- ア [ 出版社 ]→[ 著者 ]→[ 本 ]
- イ [ 出版社 ]→[ 著者 ]←[ 本 ]
- ウ [ 出版社 ]←[ 著者 ]→[ 本 ]
- エ [ 出版社 ]←[ 著者 ]←[ 本 ]
解答(令和3年)
正解: ア
Q. 条件①〜⑤によって,関係データベースで管理する “従業員” 表と “部門” 表を作成した。 “従業員” 表の主キーとして,最も適切なものはどれか。
〔条件〕
① 各従業員は重複のない従業員番号を一つもつ。
② 同姓同名の従業員がいてもよい。
③ 各部門は重複のない部門コードを一つもつ。
④ 一つの部門には複数名の従業員が所属する。
⑤ 1人の従業員が所属する部門は一つだけである。
従業員
| 従業員番号 | 従業員名 | 部門コード | 生年月日 | 住所 |
|---|
部門
| 部門コード | 部門名 | 所在地 |
|---|
- ア “従業員番号”
- イ “従業員番号” と “部門コード”
- ウ “従業員名”
- エ “部門コード”
解答(令和4年)
正解: ア
Q. 関係データベースの主キーの設定に関する記述として,適切なものだけを全て挙げたものはどれか。
a 値が他のレコードと重複するものは主キーとして使用できない。
b インデックスとの重複設定はできない。
c 主キーの値は数値でなければならない。
d 複数のフィールドを使って主キーを構成できる。
- ア a,c
- イ a,d
- ウ b,c
- エ b,d
解答(令和5年)
正解: イ
Q. DBMSにおいて,データの検索を高速に行う目的で,必要に応じて設定して利用する情報はどれか。
- ア インデックス
- イ 外部キー
- ウ 主キー
- エ スキーマ
解答(令和7年)
正解: ア