関係データベースの基本とスキーマ
関係データベースの「表」の考え方、スキーマと3層スキーマ、DBMS の機能、データベース管理者の仕事を問う過去問15問を、自力で解けるようになる。選択肢の言い換えやほかの用語の説明を混ぜたひっかけを見破れるようになる。
データベース分野の入口で、免除試験を中心に「〇〇の説明として適切なものはどれか」という用語問題が毎年のように出る。ここで覚える「表・スキーマ・3層」の考え方は、後で学ぶ正規化・SQL・トランザクションの土台になる。
このレッスンで稽古する(用語チェック・過去問)結論:関係データベースは「データを2次元の表で持つ」
関係データベース(RDB)は、データを行と列からなる2次元の表で表すデータベースです。管理するソフトは RDBMS(関係データベース管理システム。MySQL や PostgreSQL など)と呼びます。
試験では「関係データベースの説明はどれか」と聞いて、ほかのデータモデルの説明を選択肢に並べます。次の表のキーワードで見分けてください。
| 選択肢のキーワード | 何の説明か |
|---|---|
| 2次元の表で表現する | 関係データベース(正解) |
| 親レコードと子レコードをポインタで結ぶ | 階層型・ネットワーク型データベース |
| タグでデータの構造と意味を表す | XML |
| データと手続を一体化(カプセル化) | オブジェクト指向データベース |
ポインタは「次のデータの置き場所を指す矢印」、カプセル化は「データとそれを扱う処理をひとまとめにすること」です。この4択の組み合わせは2011年度・2013年度でほぼ同じ形で出ています。
理論(関係モデル)と実装(関係データベース)の用語対応
関係データベースのもとになった理論を関係モデルといいます。理論側と実装側で呼び名が違うだけで、指しているものは対応しています。
| 関係モデル(理論) | 関係データベース(実装) | 意味 |
|---|---|---|
| 関係(リレーション) | 表(テーブル) | データのまとまり全体 |
| タプル(組) | 行(レコード) | 1件分のデータ |
| 属性 | 列(カラム) | 項目(氏名・価格など) |
| 定義域(ドメイン) | 列に入れてよい値の範囲(データ型+制約に近い) | 属性が取り得る値の集合 |
順序と重複のルールは次のとおりです。理論と実装で差が出るのは「行の重複」だけと覚えてください。
| ルール | 関係モデル | 関係データベース |
|---|---|---|
| 属性・列の順序 | 意味なし | 意味なし(列名で参照する) |
| タプル・行の順序 | 意味なし | 意味なし |
| タプル・行の重複 | 重複しない | 重複し得る(主キーを決めなければ同じ行も入る) |
たとえるなら、名簿の列を「氏名・住所」から「住所・氏名」に並べ替えても、名簿の中身は同じです。これが2016年度の問題の答えの筋道で、「関係は表に対応する」が正解。「列は左から右に順序付けられる」は順序に意味がないので誤り、「行も重複しない」は実装では重複し得るので誤り、「定義域は文字型に対応」は数値なども含むので誤りです。
属性の性質:順序に意味なし・名前は必須で重複不可
関係モデルの属性は名前で区別します。だから並び順を入れ替えても同じ関係です(2019年度の正解)。
- 同じ関係の中で、二つの属性に同じ名前は付けられない(名前で区別できなくなる)
- 名前のない属性は作れない
- 二つの属性が同じ定義域を使うのは問題ない(例:「出発日」と「到着日」はどちらも日付の集合)
定義域(ドメイン):属性が取り得る値の集合
定義域(ドメイン)は、ある属性が取り得る値の集合です。たとえば「血液型」の定義域は {A, B, O, AB} です。
選択肢では、タプル(=行)、関係(=表全体)、実現値(=実際に入っている値)、ビュー(=演算で導出した表)などの説明と入れ替えてきます。「取り得る値の集合」とあれば定義域です。
スキーマ:データ定義の集合(=データベースの設計図)
スキーマは、データの性質・形式・他のデータとの関連などを定めたデータ定義の集合です。API 設計でいう「リクエストやレスポンスの型定義」に近く、中身のデータそのものではなく入れ物の決まりごとです。
「スキーマの説明はどれか」では、ほかの用語の説明が並びます。2014年度と免除試験でまったく同じ4択が出ています。
| 選択肢の説明 | 正体 |
|---|---|
| データの性質・形式・関連などのデータ定義の集合 | スキーマ(正解) |
| 実表ではない、利用者の視点による仮想的な表 | ビュー |
| データの挿入・更新・削除・検索などの操作の総称 | データ操作(DML:データ操作言語) |
| 一貫性を保つための制約条件の総称 | 整合性制約 |
3層スキーマ:外部・概念・内部に分けて、変更の影響を止める
3層スキーマアーキテクチャは、スキーマを3つの層に分ける考え方です。目的はデータ独立性、つまりある層を変えてもほかの層(特にアプリケーション)に影響が及ばないようにすることです。
| 層 | 何を表すか | 身近な例 |
|---|---|---|
| 外部スキーマ | 利用者・アプリから見たデータの見え方 | ビュー |
| 概念スキーマ | データ全体の論理的な構造 | 表の定義 |
| 内部スキーマ | ディスク上の物理的な格納方法 | インデックス・ファイル配置 |
たとえば内部スキーマで「データの置き場所」を変えても、概念スキーマが同じならアプリはそのまま動きます。これを物理データ独立性といい、2015年度の正解「格納構造を変更してもアプリケーションに影響が及ばないようにする」がこれです。
flowchart TB
A["アプリ・利用者"] --> E["外部スキーマ(見え方)"]
E --> C["概念スキーマ(論理構造)"]
C --> I["内部スキーマ(物理的な格納)"]
ひっかけ:概念スキーマを「物理的」、内部スキーマを「論理的」と役割を入れ替えた選択肢が出ます。また3層スキーマに**「物理スキーマ」という層はありません**(物理的な格納を表すのは内部スキーマ)。
DBMS の機能と、データディクショナリ
DBMS(データベース管理システム)の機能は大きく3つです。
| 機能 | 何をするか |
|---|---|
| 定義機能 | スキーマを決める(表や列を定義する) |
| 操作機能 | データの検索・挿入・更新・削除 |
| 制御機能 | 機密保護(アクセス権)・障害回復・保全(整合性の維持)・同時実行制御 |
「スキーマを決める機能はどれか」は免除試験と本試験(2015年度)で同じ4択が繰り返し出ており、答えは必ず定義機能です。機密保護・障害回復・保全はどれも名前がもっともらしいですが、制御機能の仲間です。
データディクショナリは、DBMS が管理するデータ・利用者・プログラムなどの定義情報と、それらの関係を保持するデータの集合体です。データについてのデータ(メタデータ)の辞書、と覚えます。
| 用語 | 意味 |
|---|---|
| データディクショナリ | データ・利用者・プログラムの定義情報の辞書 |
| データウェアハウス | 分析用に、業務データを時系列で大量に蓄積したもの |
| データマート | データウェアハウスから特定部門・目的向けに切り出したもの |
| データマイニング | 大量データから規則性や関係を見つけ出す分析手法 |
データベース管理者(DBA)の職務
データベース管理者(DBA)は、データベースの設計・保守・運用の監視・障害からの回復を担当します。選択肢には、アプリの作成(アプリ開発者)、受入検査(発注側の検査担当)、要員と資源の配置(プロジェクトマネージャ)といった別の役割の仕事が混ざります。
要点(試験直前に読む)
- 関係データベース=データを2次元の表で表す。関係↔表、タプル↔行、属性↔列。
- 属性も列も順序に意味はない。理論と実装で違うのは「行の重複」だけ(関係モデルは重複なし、実装は重複し得る)。
- 定義域(ドメイン)=属性が取り得る値の集合。スキーマ=データ定義の集合。
- 3層スキーマ=外部(利用者の見え方)・概念(論理構造)・内部(物理的な格納)。目的は格納構造を変えてもアプリに影響させないこと。
- スキーマを決めるDBMSの機能は定義機能。データディクショナリはデータ・利用者・プログラムの定義情報の辞書。
- DBAの仕事は設計・保守・運用の監視・障害からの回復。
ひっかけ
- 「関係データベースの説明」でポインタ(階層型・網型)、タグ(XML)、カプセル化(オブジェクト指向)を混ぜてくる。「2次元の表」を選ぶ。
- 「列は左から右に順序付けられる」「行も重複しない」は誤り。列の順序に意味はなく、実装の行は重複し得る。
- 「スキーマの説明」に仮想的な表(ビュー)、操作の総称(DML)、制約の総称(整合性制約)が並ぶ。「データ定義の集合」を選ぶ。
- 3層スキーマで概念と内部の「論理的・物理的」を入れ替えた選択肢や、存在しない「物理スキーマ」が出る。外部=利用者の見え方、内部=物理と固定して覚える。
- 「スキーマを決める機能」に機密保護・障害回復・保全が並ぶが、答えは定義機能だけ。
用語(15)
データを行と列からなる2次元の表で表して管理するデータベース。
⚠ ポインタで結ぶのは階層型・ネットワーク型、タグはXML、カプセル化はオブジェクト指向DB。
関係モデルでのデータのまとまりで、関係データベースの「表」に当たる。
⚠ タプルは1行、属性は1列。関係は表全体。
関係の中の1件分のデータで、表の「行」に当たる。
⚠ 関係モデルではタプルは重複しないが、実装の行は重複し得る。
関係の項目で、表の「列」に当たり、名前で区別され並び順に意味はない。
⚠ 列も同じく順序に意味はない。同名の属性・無名の属性は作れない。
ある属性が取り得る値の集合。
⚠ 実現値は実際に入っている値。文字型・文字列型に限られない。
データの性質・形式・他データとの関連などを定めたデータ定義の集合。
⚠ 仮想的な表ならビュー、操作の総称ならDML、制約の総称なら整合性制約。
実在する表から関係演算で導出した、利用者の視点による仮想的な表。
⚠ スキーマ(データ定義の集合)の選択肢に混ぜられる。
スキーマを外部・概念・内部の3層に分け、ある層の変更がほかの層やアプリに影響しないようにする構造。
⚠ 「物理スキーマ」という層はない。
利用者やアプリケーションから見たデータの見え方を定義したもの。
⚠ 論理構造全体は概念スキーマ。
データベース全体の論理的な構造を定義したもの。
⚠ 「物理的関係を表す」とあれば誤り(それは内部スキーマ)。
データをディスクにどう格納するかという物理的な構造を定義したもの。
⚠ 「論理的関係を表す」とあれば誤り(それは概念スキーマ)。
データの物理的な格納構造を変えても、アプリケーションに影響が及ばない性質。
⚠ 概念スキーマの変更が外部スキーマに影響しない性質は論理データ独立性。
DBMSの機能のうち、スキーマ(データ構造)を決める機能。
⚠ 機密保護・障害回復・保全はいずれも制御機能の仲間で、スキーマは決めない。
DBMSが管理するデータ・利用者・プログラムの定義情報と、それらの関係を保持するデータの集合体。
⚠ データウェアハウス(分析用の蓄積)、データマート(部門向けの切り出し)、データマイニング(分析手法)。
データベースの設計・保守・運用の監視・障害からの回復を担当する役割。
⚠ アプリ作成は開発者、受入検査は発注側、要員配置はプロジェクトマネージャ。
このレッスンの過去問
- 関係データベースの定義(2次元表)平成28年度 春期 基本情報技術者試験 午前 問26
- 関係モデルの属性の性質(順序に意味なし)平成31年度 春期 基本情報技術者試験 午前 問26
- 関係モデルのドメイン(属性値の集合)基本情報技術者試験 科目A免除 修了試験 20120122 実施分 問29
- スキーマの定義平成26年度 秋期 基本情報技術者試験 午前 問26
- 3層スキーマアーキテクチャの目的(物理データ独立性)平成27年度 春期 基本情報技術者試験 午前 問26
- DBMSの定義機能(スキーマ定義)基本情報技術者試験 科目A免除 修了試験 20250608 実施分 問18
- データディクショナリの定義平成27年度 秋期 基本情報技術者試験 午前 問25
- データベース管理者の職務基本情報技術者試験 科目A免除 修了試験 200912 実施分 問31