サイトアイコン しらかわるーむ

【基本情報技術者】データベースについて

ちょっとどのくらいの量があるのかをチラ見してみたのですが、データベースの範囲はプロットだけでも結構な量行きそうです。

さて、がんばって覚えていきましょう。

スポンサーリンク

基本情報技術者~データベース~

データベースの基本

データベースが扱う「情報」は、4大経営資源のひとつです(ヒト、モノ、カネ、情報)。このため、多くの企業にとってデータベースの活用は必須といえます。

データベースとは

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

データモデルとは

データモデルとは、現実世界にある複雑なデータの相互関係をわかりやすく表した図のことです。データモデルはデータベースを作る際の設計図になります。

関係データモデル

データモデルと一口にいっても、世の中には「関係データモデル」「階層データモデル」「ネットワークデータモデル」といった、さまざまなデータモデルが存在しています。
これらのうち、最も普及しているものが、「関係データモデル」です。簡単なものですと、Excelの表として表現することができます。

関係データベース

関係データベースとは

関係データベースとは、データを「表」で管理するデータベースのことです。これは、関係データモデルをコンピュータ上に実装したものです。

主キー

主キーとは、膨大なデータの中から1つのレコードを識別するための列です。専門的にいうと「テーブルの中からレコードを一意に識別するための列」となります。
データが数件しかない場合は良いのですが、

外部キー

外部キーとは、別のテーブルの主キーを参照する列のことです。下図の「教員番号」が外部キーにあたります。

データベース設計

E-R図

E-R図(Entity-Relationship Diagram)とは、データの関係性を「エンティティ(実体)」と「リレーションシップ(関連)」という2つの概念で表した図のことです。
関係データベースを作成する際の設計図として、E-R図が使われます。

要素説明
エンティティ(実体)人間が管理する対象。「名詞で表せるもの」と考えると理解しやすい。
リレーションシップ(関連)エンティティとエンティティの関係。「動詞で表せるもの」と考えると理解しやすい。

多重度

多重度とは、エンティティとエンティティの間の量の関係を示す度合いです。E-R図では、多重度として次のような表記ルールを用います。

表記意味
11
*任意の整数
0..10から1の範囲
1..*1以上(1から任意の整数の範囲という意味)

正規化

正規化とは、データが重複したり、データ更新の際に矛盾が生じないようにテーブルを分けることです。

これを下図のように、「すべてのデータを重複なく、データを更新しても矛盾しない形に整理すること」を「正規化」といいます。

関数従属

正規化について学ぶためには、「関数従属」という言葉も覚えておかなくてはなりません。
関数従属とは、ある属性(列)の値が決まると、他の属性(列)の値も一意に決まることを指します。
例えば、上のテーブルで表した[学生番号]が決まると[学生名]も一意に決まります。このとき、「学生名は学生番号に関数従属する」といいます。

3つの関数従属

関数従属には3つの種類があります。

 (1)完全関数従属
 (2)部分関数従属
 (3)推移的関数従属

正規化の手順

正規化を行なう目的は以下の通りです。

正規化の目的は、データが重複したり、データ更新の際に矛盾が生じたりしないようにすること

これをもう少し具体的に説明すると次のようになります。

正規化の目的は、表中のすべての関数従属から、部分関数従属と推移的関数従属を取り除き、完全関数従属だけを残すこと

ここでいう「完全関数従属だけを残すこと」とは、つまり「すべての矢印が主キーから出るようになるまでテーブルを分割していくこと」となります。
さて、ここからの正規化のやり方は重要ですよ!

・正規化のゴールは、すべての関数従属が主キーから出るまでテーブルを分割すること
・試験では、主キーが複合キーの場合が多い

小休止!お試しトライ!過去問①

問1 関数従属

問題
6行だけから成る"配送"表において成立している関数従属はどれか。ここで、X→Yは、XはYを関数的に決定することを表す。

平成28年度

ア.配送先→部品ID     イ.配送日→部品ID
ウ.部署ID→部品ID     エ.部署名→配送先

解答
関数従属とは、ある属性の値が決まったとき、他の属性の値も一意に決まることです。ア.~エ.をすべて見ていくと、一意な関係にあるのは、配送先→部品IDのひとつです。

従って、解はア.となります。

データベース管理システム

ここでは、「データベース管理システム」と「SQL」について取り扱います。

データベース管理システムとは

データベース管理システム(DataBase Management System:DBMS)とは、アプリケーションソフトウェアの要求に応じて、データベースを操作するシステムです。

データ操作

データベースに格納されているデータを操作することを「データ操作」といいます。データ操作には、6つのやり方があります。

操作説明
選択テーブルから特定のレコードのみを取り出す操作
射影テーブルからある特定の列のみを取り出す操作
結合複数のテーブルを1つする操作
挿入テーブルにレコードを追加する操作
更新レコード内のデータを変更する操作
削除テーブルからレコードを削除する操作

これら6つの操作のうち、特に重要なのは「選択」「射影」「結合」です。この3つについては、基本情報技術者試験でよく出題されるので、しっかりと覚えておきましょう。

SQL

SQL(Structured Query Language)とは、関係データベースを操作するための言語です。
アプリケーションソフトウェア→(SQLで命令を出す)→RDBMS←(データを操作する)→関係DB

SELECT文

SELECT 列名
FROM テーブル名

例えば、学生テーブルから学生名を取り出したいというときは、次のように記述します。

SELECT 学生名
FROM 学生

この場合、テーブルから列を取り出しているので、「射影」の操作になります。

SELECT 学生番号, 学生名
FROM 学生

SELECT *
FROM 学生

SELEECT 列名
FROM テーブル名
WHERE 条件式

例えば、学生テーブルから「学生名が鈴木愛子」のレコードのみを取り出したいというときは、次のように記述します。

SELECT *
FROM 学生
WHERE 学生名 = '鈴木愛子'

この場合、テーブルからレコードを取り出しているので、「選択」の操作になります。

条件式(WHERE句)の書き方

SQLの条件式は、次のように指定します。

WHERE 列名 演算子 値

例えば、学生名の値が「鈴木愛子」のレコードを取り出すには、次のように指定します。

WHERE 学生名 = '鈴木愛子'

比較演算子意味
=等しい
<>等しくない
>より大きい
<より小さい
>=以上
<=以下

例えば、学生番号が「2」以上のレコードを取り出すには、以下のように条件式を指定します。

SELECT *
FROM 学生
WHERE 学生番号 >= 2

論理演算子意味
ANDかつ
ORまたは
NOT否定

例えば、学生番号が「2」以上、または、学生名が「鈴木愛子」のレコードを取り出すには、以下のように条件式を指定します。

SELECT *
FROM 学生
WHERE 学生番号 >= 2 OR 学生名 = '鈴木愛子'

テーブルを結合する

選択と射影の説明では、操作対象のテーブルは1つでした。しかし、結合の場合は複数のテーブルをくっつけてデータを取り出すという方法を用います。

SELECT 列名
FROM テーブル名A, テーブル名B
WHERE テーブル名A.列名 = テーブル名B.列名

学生テーブルと教員テーブルを結合する場合は、以下のように記述します。

SELECT 学生番号, 学生名, 電話番号, 教員名
FROM 学生, 教員
WHERE 学生.教員番号 = 教員.教員番号

データを集計する

データを集計するには関数を使います。基本情報技術者試験に登場する主な関数は次の5つです。

関数機能
SUM(列名)指定した列の、合計を求める
AVG(列名)指定した列の、平均を求める
MIN(列名)指定した列の、最小値を求める
MAX(列名)指定した列の、最大値を求める
COUNT(*)行数を求める

例えば、学生テーブルに登録されているレコードの行数を求めるには、以下のように指定します。

SELECT COUNT(*)
FROM 学生

データをグループ化する

データをグループ化するには、SELECT文にGROUP BY句を指定してあげます。GROUP BY句を使うことで、「列の値が同じレコード」をまとめることができます。

例えば、受注テーブルに登録されているデータから、商品ごとの数量の合計を求めたい場合には、次のように指定します。

SELECT 商品名, SUM(数量)
FROM 受注
GROUP BY 商品名

WHERE句とGROUP BY句の記載順序

WHERE句とGROUP BY句を同時に使うときには、WHERE句を先に記述し、後にGROUP BY句を記述します。

例えば、受注テーブルから、商品名が「ペン」の数量だけを求めるには、以下のように指定します。

SELECT 商品名, SUM(数量)
FROM 受注
WHERE 商品名 = 'ペン'
GROUP BY 商品名

HAVING句

WHERE句は、グループ化する前のテーブルに対して条件式を指定しますが、HAVING句は、グループ化した後のテーブルに対して条件式を指定します。GROUP BY句の前にくるからWHERE句はグループ化する前のテーブルに、GROUP BY句の後にくるからHAVING句はグループ化した後のテーブルに対して効果があると覚えましょう。

SELECT 商品名, SUM(数量)
FROM 受注
GROUP BY 商品名
HAVING SUM(数量) >= 30

データを並べ替える

データを並べ替える場合は、SELECT文にORDER BY句を指定します。ORDER BY句を使用すると、指定した列の値に応じてレコードを並べ替えることができます。

並べ方は2種類あります。並べ方の指定を省略した場合はASC(昇順)となります。

並べ方意味
ASC昇順(小さい値から大きい順に並べ替えられる)
DESC降順(大きい値から小さい順に並べ替えられる)

例えば、受注テーブルのレコードを、数量で昇順に並べ替えるやり方は、以下のように指定します。

SELECT 商品名, 数量
FROM 受注
ORDER BY 数量

列名に別名をつける

列名の後ろにAS句を指定してあげると、列名に別名を付けることができます。

SELECT 列名 AS 別名

例えば、以下のよう指定すると、「SUM(数量)」という表示名に「合計数量」という別名を設定してあげることができます。

SELECT 商品名, SUM(数量) AS 合計数量
FROM 受注
GROUP BY 商品名

ビュー

データベースに保存されているデータ、つまりテーブルのことを「実表」または「基底表」と呼びます。一方で、「CREATE VIEW文」を用いて、新たに作成された仮想的な表のことを「ビュー」または「導出表」と呼びます。

CREATE VIEW ビュー名
AS SELECT 列名
FROM 表名

これは今まで出てきたSQL文とはちょっと異なります。注意して覚えましょう。

CREATE VIEWの後にビュー名を指定します。そして、ASの後に「データを取り出すためのSELECT文」を指定します。

例えば、学生テーブルから学生番号と学生名のみを取り出して「公開学生名簿ビュー」を作成する場合は、次のように指定します。

CREATE VIEW 公開学生名簿
AS SELECT 学生番号, 学生名
FROM 学生

SELECT *
FROM 公開学生名簿

このように、公開学生名簿ビューの元となっている学生テーブルに含まれている電話番号は取り出すことができません。これが、ビューの最大の特徴です。

ただし、複数の表を結合したようなビューは、データを変更することはできません。

インデックス

インデックスとは、データベースの検索を高速化する機能です。インデックスは「索引」という意味です。データベースにインデックスを作成しておくことで、必要なデータをすぐに見つけることができます。

上のインデックスでは、学生名が50音順に並んでいるため、目的の「学生名」をすぐに見つけることができます。さて、そうなるとすべての列に対してインデックスを作成すれば良いのかという話になりますが、すべての列にインデックスを作成してしまうと、データベース全体の処理効率が悪化してしまうので、ほどほどにする必要があるようです。

ストアドプロシージャ

ストアドプロシージャとは、データベースに対する複数の命令を1つの命令にまとめて、データベース管理システムに保存したものです。

通常は、命令の数だけアクセスする必要があるものが、データベース管理システムに保存されているストアドプロシージャを呼び出すだけで、複数の命令を処理させることができます。

ストアドプロシージャを使うことで、クライアントとサーバ間のネットワークの負荷を減らすことができます。

小休止!お試しトライ!過去問②

問1 選択・射影・結合

問題
列A1~A5から成るR表に対する次のSQL文は、関係代数のどの演算に対応するか。

平成25年度

SELECT A1, A2, A3 FROM R
WHERE A4 = 'a'

ア.結合と射影     イ.差と選択
ウ.選択と射影     エ.和と射影

解答
まず、和と差については習っていません。そこで、残りはア.かウ.となります。

結合の場合、FROM句で2つのテーブルを扱うため、消去法で答えが出ます。

従って、解答はウ.となります。

トランザクション管理

DBMSの主な機能として、「データ操作」「トランザクション処理」「排他制御」を挙げました。このうち「トランザクション管理」についてみていきたいと思います。

トランザクション管理

トランザクション管理とは、ユーザーがDBMSに対して行う一連のトランザクション処理を管理することです。トランザクションとは「関連する複数の処理のまとまり」です。例えば、次のような処理です。

この2つの処理をまとめて、トランザクションと呼びます。

ACID特性

ACID特性アシッドとくせいとは、トランザクション管理に必要な4つの性質の頭文字を取ったものです。中でも、基本情報技術者試験では「原子性」がよく出題されます。

性質説明
原子性(Atomicity)トランザクション内の処理が「ぜんぶ実行される」または「ぜんぶ取り消される」のどちらかの結果となること。
一貫性(Consistency)トランザクションの前後で、データベースに矛盾がないこと。
独立性(Isolation)トランザクション結果が、他のトランザクション結果の影響を受けないこと。
耐久性(Durability)トランザクション完了後にハードウェア障害が起きたとしても、更新されたデータベースの内容が保証されること。

障害回復

障害回復とは、壊れたデータやハードウェアを直すことです。「リカバリ」とも呼ばれます。障害回復を行うには、次の2つのファイルが必要となります。

種類説明
バックアップファイルデータベース全体を保存しているファイル。毎週末などに定期的にバックアップを行っている。
ログファイルトランザクションの前後の状態を記録したファイル。トランザクション開始直前のものを「更新前ログファイル」といい、完了後のものを「更新後ログファイル」という。

障害回復の方法

障害回復の方法には、次の2つがあります。

排他制御

DBMSの主な機能として、「データ操作」「トランザクション処理」「排他制御」を挙げました。このうち「排他制御」についてみていきたいと思います。「排他制御」はこの3つのうちの中では、もっとも重要な機能であるといっても過言ではありませんので、皆さんしっかり覚えていきましょう。

排他制御

排他制御とは、複数の人が同じデータを同時に更新しようとしたときなどに、データに矛盾が生じないようにするための機能です。

具体例を出します。
太郎くんと花子さんの2人が経営する八百屋さんの「りんごの在庫処理」を追っていったときのものです。

  1. 太郎くんがりんごを1個売る。
  2. 太郎くんがりんごの在庫数をデータベースに反映させる。太郎くんはデータベースからりんごの在庫数3個を読み出す。
  3. 太郎くんが処理をしている間に、花子さんもりんごを1個売る。
  4. 花子さんは太郎さんがデータベースを処理しているとは知らずに、りんごの在庫数3個を読み出す。
  5. 花子さんはりんごの在庫数を「2個」として書き込む。
  6. 太郎くんもりんごの在庫数を「2個」として書き込む。

結果、りんごは2個売れたので、在庫は1となるはずなのですが、排他制御を行っていなかったため、在庫は2という矛盾が生じました。

ロック

排他制御では「ロック」という機能を使います。ロックとは、データベースに対するデータの読み書きを一時的にストップさせる機能です。太郎くんと花子さんの例で、今度はロック機能を使って説明してみます。

  1. 太郎くんがりんごを1個売る。
  2. 太郎くんは、自分がデータを読む前に、他の人がデータを読み書きできないようにロックをかける。
  3. 太郎くんはデータベースからりんごの在庫数3個を読み出す。
  4. 太郎くんが処理をしている間に、花子さんもりんごを1個売る。
  5. しかし、花子さんはデータベースがロックされていたため、りんごの在庫数にアクセスできない。
  6. そのため花子さんは、りんごの在庫数を読み出すことも書き込むこともできない。
  7. 太郎くんはりんごの在庫数を「2個」として書き込む。
  8. 太郎くんはロックを解除(アンロック)して、他の人がデータを読み書きできるようにする。
  9. ようやく花子さんはデータベースを読み書きできるようになったため、ロックをかけて、在庫数を読み込み、新たな在庫数「1個」を書き込む。
  10. 処理が正常に終了する。

小休止!お試しトライ!過去問③

問1 障害回復

問題
データベースの更新前や更新後の値を書き出して、データベースの更新記録として保存するファイルはどれか。

平成30年度

ア.ダンプファイル      イ.チェックポイントファイル
ウ.バックアップファイル   エ.ログファイル

解答
データベースの記録するものは、バックアップファイルとログファイルの2つです。そして、更新前、更新後に保存するファイルは、ログファイルです。

従って、解はエ.となります。

最後に

「データベース」の項目はかなり分量がありましたね。新しい耳慣れない言葉も多く出てきました。しっかりと復習したいところです。
ちなみに、テキストを読まないと完全な学習は行えませんので、ぜひ下で紹介している本をご購入いただけたらと思います。

こちらが参考にさせていただいているテキストです。

白川秋

ではでは、参考までに

モバイルバージョンを終了