データベース基礎

1. データベースとは

データベースとは、情報の集まりです。データベースに情報を集めるとデータを一元管理することができます。

身近な利用例
  • オンラインショッピングサイトの管理システム
  • 銀行の口座管理システム
  • 学校の成績管理システム

例えば、オンラインショッピングサイトでログインできるのは、ユーザーIDやパスワードがデータベースに保存されているからです。
また、商品を検索したり、購入履歴を確認したりできるのも、すべての商品情報がデータベースに保存されているおかげです。

2. データベースの種類

データベースにはデータの持ち方によっていくつかの種類があります。

1. 関係データモデル(リレーショナルデータベース) 最重要!

データを表(テーブル)で管理します。
SQL(Structured Query Language)という言語を使用してデータの操作を行います。
現在のシステム開発で最も一般的に使われています。

2. 階層型データモデル

データをツリー構造(会社の組織図のような形)で管理します。親子関係が明確なデータに適しています。

3. ネットワーク型データモデル

データを網目状(グラフ構造)で管理し、複雑な関係性を表現できます。

3. 関係データベース(Relational Database)

関係データベースは、データを表(テーブル)で管理するデータベースです。
Excelのシートをイメージするとわかりやすいです。表は、行(レコード)列(属性)で構成されています。

< 顧客テーブルのイメージ >
顧客ID 氏名 住所 電話番号
001 山田 太郎 東京都... 090-xxxx...
002 佐藤 花子 大阪府... 080-xxxx...
003 鈴木 一郎 北海道... 070-xxxx...
縦の並び 列(属性 / カラム):項目を表す(氏名、住所など)
横の並び 行(レコード):データの1件分を表す
重なり フィールド:行と列が交差する1つのデータ
行(レコード)
データの1つ1つのまとまりを表します。上記の例では、佐藤花子さん一人の情報が「1行」に対応します。
列(属性)
データの各項目を表します。上記の例では、「氏名」「住所」「電話番号」などが列に対応します。
フィールド
行と列が交差するマス目のことで、具体的なデータが格納される場所です。

4. 主キー(Primary Key)

表の中からある特定の行(レコード)を識別するための列です。
主キーとなる列には、以下の2つの重要な制約(ルール)が課されます。

一意性制約(Unique)

主キーの値は、表の中で重複してはいけません
例:同じ「会員番号」を持つ人が2人いてはいけない。

非NULL制約(Not Null)

主キーの値は、空(NULL)であってはいけません
例:「会員番号」がない(空っぽの)会員データは登録できない。

例えば、銀行口座のデータベースでは「口座番号」が主キーになります。
キャッシュカードを入れて、全く別人の口座が表示されたら大変ですよね。だから「一意(ユニーク)」である必要があります。
また、口座番号が空っぽだと誰の口座かわからないので、必ず値が入っている必要があります。

複合主キー

1つの列だけでは一意に識別できない場合、複数の列を組み合わせて主キーとすることがあります。
例えば「学校のテストの点数」を管理する場合、「学籍番号」だけでは何の教科かわかりません。「教科コード」だけでも誰の点数かわかりません。
そこで「学籍番号」+「教科コード」の2つを組み合わせて主キーにすることで、一意にデータを特定できます。

5. 外部キー(Foreign Key)

別の表の主キーを参照する列のことです。
関係データベースでは、1つの巨大な表を作るのではなく、テーマごとに表を分けて管理し、それらを外部キーで「関連付け」ます。

部署テーブル (主)
部署ID 主キー 部署名
D01営業部
D02開発部

参照
社員テーブル (従)
社員ID 氏名 部署ID 外部キー
001IT 太郎D02
002営業 花子D01

上の例では、社員テーブルの「部署ID」が外部キーです。ここに「D02」と入力することで、部署テーブルの「開発部」と関連付けられます。
いちいち「開発部」という文字を入力しなくて済むため、データに矛盾が生じにくくなります。

参照整合性制約

外部キーには、「参照先の表に存在しない値は登録できない」という重要なルールがあります。これを参照整合性制約と呼びます。

例えば、部署テーブルにない「D99」というコードを社員テーブルに入力しようとするとエラーになります。
また、社員テーブルで誰かが使っている「D01(営業部)」を、部署テーブルから勝手に削除することもできません(削除するには、先に社員の所属を外す必要があります)。

6. インデックス(Index)

データの検索速度を向上させるために使用されるデータ構造です。
本の「索引(さくいん)」のようなものです。「このデータは何ページのどこにあるよ」という情報を持っています。

検索が速くなる!
インデックスがないと、データベースはデータを最初から最後まで全部探さなければなりません(全件走査)。
インデックスを作っておくことで、目的のデータをピンポイントで素早く見つけることができます。

過去問演習(データベース基礎)

令和4年度 問83

データを行と列から成る表形式で表すデータベースのモデルはどれか。

令和6年度 問60

関係データベースを構成する要素の関係を表す図において,図中のa~cに入れる字句の適切な組合せはどれか。

令和6年度 問60 問題図

【解答群】

令和6年度 問60 解答群
令和元年秋期 問66

関係データベースにおいて,主キーを設定する理由はどれか。

  • 算術演算の対象とならないことが明確になる。
  • 主キーを設定した列が検索できるようになる。
  • 他の表からの参照を防止できるようになる。
  • 表中のレコードを一意に識別できるようになる。
令和5年度 問78

関係データベースの主キーの設定に関する記述として,適切なものだけを全て挙げたものはどれか。

  • a 値が他のレコードと重複するものは主キーとして使用できない。
  • b インデックスとの重複設定はできない。
  • c 主キーの値は数値でなければならない。
  • d 複数のフィールドを使って主キーを構成できる。
  • a,c
  • a,d
  • b,c
  • b,d
平成30年春期 問73

データベースにおける外部キーに関する記述のうち,適切なものはどれか。

  • 外部キーがもつ特性を,一意性制約という。
  • 外部キーを設定したフィールドには,重複する値を設定することはできない。
  • 一つの表に複数の外部キーを設定することはできない。
  • 複数のフィールドを,まとめて一つの外部キーとして設定することができる。
平成30年春期 問86

PCのキーボードではなく、DBMSにおけるインデックスに関する記述として、適切なものはどれか。

  • 検索を高速に行う目的で,必要に応じて設定し,利用する情報
  • 互いに関連したり依存したりする複数の処理を一つにまとめた,一体不可分の処理単位
  • 二つの表の間の参照整合性制約
  • レコードを一意に識別するためのフィールド

データベース設計

1. データベース設計とは

業務で使用するデータやデータ同士の関連性を整理して、どのように格納するかを決定することです。
家を建てるときに設計図が必要なように、データベースを作る前にもしっかりとした設計が必要です。

2. E-R図(Entity-Relationship Diagram)

データの関係性をエンティティ(実体)リレーションシップ(関連)という2つの概念を使って表した図です。
関係データベースの設計図として使われます。

エンティティ(実体)

管理対象となる実体です。
例:顧客、商品、社員 など

リレーションシップ(関連)

エンティティとエンティティの関係を表します。
例:1対1、1対多、多対多

リレーションシップの種類と例

※表記法(矢印の形など)については試験問題文に指示があります。

1 対 1
校長
1 1
学校

例えば、校長と学校は1対1です。

1 対 多
学校
1 <
学生

例えば、学校と学生は1対多です。

多 対 多
学生
> <
受講科目

例えば、学生と受講科目は多対多です。

3. 正規化

最頻出!

データが重複したり、データの更新の際に矛盾が生じたりしないように表を分けることです。
1つの表にごちゃ混ぜにデータを入れると、後で修正するときに大変なことになります。

正規化していないと起きる問題(更新時異常)

【例】以下のようなテーブルで管理している場合

学生番号学生名教員名
1山田太郎伊藤一郎
2佐藤花子田中花子
3鈴木一郎田中花子
  • 変更が大変:「田中花子」先生が結婚して苗字が変わった場合、2行分(佐藤さんと鈴木さんの行)を修正しなければなりません。修正漏れがあると矛盾が生じます。
  • データが消える:もし山田太郎君が転向してレコードを削除すると、担任の「伊藤一郎」先生の情報まで学校から消えてしまいます(先生だけの管理簿がないため)。

正規化(表を分ける)する!
学生テーブル
学生番号学生名教員番号
1山田太郎3
2佐藤花子1
3鈴木一郎1
教員テーブル
教員番号教員名
1田中花子
2松井秀樹
3伊藤一郎

このように表を分けることで、矛盾も重複も回避できます。

過去問演習(データベース設計)

平成31年 春期 問91

E-R図で表現するものはどれか。

  • HDD内のデータの物理的な配置
  • エンティティ同士の関係
  • 処理の流れ
  • 入力データ及び出力データ
平成31年 春期 問92

関係データベースを構築する際にデータの正規化を行う目的として,適切なものはどれか。

  • データに冗長性をもたせて,データ誤りを検出する。
  • データの矛盾や重複を排除して,データの維持管理を容易にする。
  • データの文字コードを統一して,データの信頼性と格納効率を向上させる。
  • データを可逆圧縮して,アクセス効率を向上させる。
あれ和元年 秋期 問87

売上伝票のデータを関係データベースの表で管理することを考える。売上伝票の表を設計するときに,表を構成するフィールドの関連性を分析し,データの重複及び不整合が発生しないように,複数の表に分ける作業はどれか。

  • 結合
  • 射影
  • 正規化
  • 排他制御

データベース管理システムとデータ操作

1. DBMSとSQL

DBMS (DataBase Management System)

アプリケーションソフトウェアの要求に応じてデータベースを操作・管理するシステムです。
大量のデータを効率よく安全に扱うための「データベースの管理人」のような役割を果たします。

SQL

関係データベースを操作するための言語(命令文)です。
「データをください」「データを登録して」といった命令を、SQLという言葉を使ってDBMSに伝えます。

SQLによるデータベース操作の流れ
アプリケーション

SQLで命令
DBMS

操作
データベース
結果を返す
DBMSの主な3つの機能
  • データ操作
    データの検索、追加、更新、削除など
  • トランザクション管理
    一連の処理の整合性を保つ
  • 排他管理
    同時アクセスによる不整合を防ぐ

2. データ操作

データベースに格納されているデータを操作することです。特に以下の3つの操作(関係演算)が重要です。

重要選択(Selection)

表からある特定の行(レコード)のみを取り出す操作です。

番号氏名電話
1山田090-1111
2佐藤090-2222
3鈴木090-3333

「番号2」を選択
番号氏名電話
2佐藤090-2222
重要射影(Projection)

表からある特定の列(フィールド)のみを取り出す操作です。

番号 氏名 電話
1山田...
2佐藤...
3鈴木...

「氏名」を射影
氏名
山田
佐藤
鈴木
重要結合(Join)

複数の表を1つにする操作です。

学生表
氏名教員ID
山田3
佐藤1
教員表
教員ID教員名
1田中
3伊藤

教員IDで結合
結合後の表
氏名教員ID教員名
山田3伊藤
佐藤1田中

その他の基本的な操作:

  • 挿入 (INSERT):表に行を追加する。
  • 更新 (UPDATE):行内のデータを変更する。
  • 削除 (DELETE):表から行を削除する。

3. トランザクションと排他制御

トランザクション管理 重要

複数の処理を1つの処理としてまとめて実行することをトランザクションといいます。
トランザクション管理は、処理の途中でエラーが起きてもデータの整合性を保つための機能です。

【例】銀行の振込(AさんからBさんへ1万円送る)
  1. Aさんの口座から1万円引く
  2. Bさんの口座に1万円足す

もし1.が終わった後にエラーで止まると、1万円が消滅してしまいます。
だから「1と2をセットで成功させる」か「処理自体をすべてなかったことにする」のどちらかにする必要があります。

コミット (Commit)
全ての処理が成功したら、変更結果を確定させる。
ロールバック (Rollback)
失敗したら、処理前の状態に戻す(取り消す)。
排他管理(排他制御)

複数のユーザーが同時にデータベースにアクセスする際に、データの不整合を防ぐ機能です。
ロック機能などを使って、「他の人は同時に触らないでね」とアクセス権を制限し、データの競合を防ぎます。

レプリケーション

データベースの内容をリアルタイムに複製(レプリカ作成)して同期する技術です。
これにより、データのバックアップや、メインサーバー故障時の切り替え予備、検索処理の負荷分散が容易になります。

過去問演習(DBMSとデータ操作)

令和3年度 問75

情報システムに関する機能a~dのうち,DBMSに備わるものを全て挙げたものはどれか。

  • a アクセス権管理
  • b 障害回復
  • c 同時実行制御
  • d ファイアウォール
  • a,b,c
  • a,d
  • b,c
  • c,d
平成31年春期 問95

関係データベースの操作を行うための言語はどれか。

  • FAQ
  • SQL
  • SSL
  • UML
令和4年度 問98

関係データベースで管理している"従業員"表から,氏名の列だけを取り出す操作を何というか。

  • 結合
  • 射影
  • 選択
平成30年春期 問65

関係データベースの操作a~cと,関係演算の適切な組合せはどれか。

  • a 指定したフィールド(列)を抽出する。
  • b 指定したレコード(行)を抽出する。
  • c 複数の表を一つの表にする。
  • a-結合,b-射影,c-選択
  • a-射影,b-結合,c-選択
  • a-射影,b-選択,c-結合
  • a-選択,b-射影,c-結合
令和6年度 問74

トランザクション処理に関する記述のうち,適切なものはどれか。

  • コミットとは,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態に戻すことである。
  • 排他制御とは,トランザクションが正常に処理されたときに,データベースの内容を確定させることである。
  • ロールバックとは,複数のトランザクションが同時に同一データを更新しようとしたときに,データの矛盾が起きないようにすることである。
  • ログとは,データベースの更新履歴を記録したファイルのことである。
令和5年度 問66

トランザクション処理におけるコミットの説明として,適切なものはどれか。

  • あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
  • トランザクションが正常に処理されたときに,データベースへの更新を確定させること
  • 何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
  • 複数の表を,互いに関係付ける列をキーとして,一つの表にすること