データベース基礎
1. データベースとは
データベースとは、情報の集まりです。データベースに情報を集めるとデータを一元管理することができます。
身近な利用例
- オンラインショッピングサイトの管理システム
- 銀行の口座管理システム
- 学校の成績管理システム
例えば、オンラインショッピングサイトでログインできるのは、ユーザーIDやパスワードがデータベースに保存されているからです。
また、商品を検索したり、購入履歴を確認したりできるのも、すべての商品情報がデータベースに保存されているおかげです。
2. データベースの種類
データベースにはデータの持ち方によっていくつかの種類があります。
データを表(テーブル)で管理します。
SQL(Structured Query Language)という言語を使用してデータの操作を行います。
現在のシステム開発で最も一般的に使われています。
2. 階層型データモデル
データをツリー構造(会社の組織図のような形)で管理します。親子関係が明確なデータに適しています。
3. ネットワーク型データモデル
データを網目状(グラフ構造)で管理し、複雑な関係性を表現できます。
3. 関係データベース(Relational Database)
関係データベースは、データを表(テーブル)で管理するデータベースです。
Excelのシートをイメージするとわかりやすいです。表は、行(レコード)と列(属性)で構成されています。
< 顧客テーブルのイメージ >
| 顧客ID | 氏名 | 住所 | 電話番号 |
|---|---|---|---|
| 001 | 山田 太郎 | 東京都... | 090-xxxx... |
| 002 | 佐藤 花子 | 大阪府... | 080-xxxx... |
| 003 | 鈴木 一郎 | 北海道... | 070-xxxx... |
- 行(レコード)
- データの1つ1つのまとまりを表します。上記の例では、佐藤花子さん一人の情報が「1行」に対応します。
- 列(属性)
- データの各項目を表します。上記の例では、「氏名」「住所」「電話番号」などが列に対応します。
- フィールド
- 行と列が交差するマス目のことで、具体的なデータが格納される場所です。
4. 主キー(Primary Key)
表の中からある特定の行(レコード)を識別するための列です。
主キーとなる列には、以下の2つの重要な制約(ルール)が課されます。
主キーの値は、表の中で重複してはいけません。
例:同じ「会員番号」を持つ人が2人いてはいけない。
主キーの値は、空(NULL)であってはいけません。
例:「会員番号」がない(空っぽの)会員データは登録できない。
例えば、銀行口座のデータベースでは「口座番号」が主キーになります。
キャッシュカードを入れて、全く別人の口座が表示されたら大変ですよね。だから「一意(ユニーク)」である必要があります。
また、口座番号が空っぽだと誰の口座かわからないので、必ず値が入っている必要があります。
複合主キー
1つの列だけでは一意に識別できない場合、複数の列を組み合わせて主キーとすることがあります。
例えば「学校のテストの点数」を管理する場合、「学籍番号」だけでは何の教科かわかりません。「教科コード」だけでも誰の点数かわかりません。
そこで「学籍番号」+「教科コード」の2つを組み合わせて主キーにすることで、一意にデータを特定できます。
5. 外部キー(Foreign Key)
別の表の主キーを参照する列のことです。
関係データベースでは、1つの巨大な表を作るのではなく、テーマごとに表を分けて管理し、それらを外部キーで「関連付け」ます。
| 部署ID 主キー | 部署名 |
|---|---|
| D01 | 営業部 |
| D02 | 開発部 |
参照
| 社員ID | 氏名 | 部署ID 外部キー |
|---|---|---|
| 001 | IT 太郎 | D02 |
| 002 | 営業 花子 | D01 |
上の例では、社員テーブルの「部署ID」が外部キーです。ここに「D02」と入力することで、部署テーブルの「開発部」と関連付けられます。
いちいち「開発部」という文字を入力しなくて済むため、データに矛盾が生じにくくなります。
参照整合性制約
外部キーには、「参照先の表に存在しない値は登録できない」という重要なルールがあります。これを参照整合性制約と呼びます。
例えば、部署テーブルにない「D99」というコードを社員テーブルに入力しようとするとエラーになります。
また、社員テーブルで誰かが使っている「D01(営業部)」を、部署テーブルから勝手に削除することもできません(削除するには、先に社員の所属を外す必要があります)。
6. インデックス(Index)
データの検索速度を向上させるために使用されるデータ構造です。
本の「索引(さくいん)」のようなものです。「このデータは何ページのどこにあるよ」という情報を持っています。
インデックスがないと、データベースはデータを最初から最後まで全部探さなければなりません(全件走査)。
インデックスを作っておくことで、目的のデータをピンポイントで素早く見つけることができます。
過去問演習(データベース基礎)
データを行と列から成る表形式で表すデータベースのモデルはどれか。
関係データベースを構成する要素の関係を表す図において,図中のa~cに入れる字句の適切な組合せはどれか。
【解答群】
関係データベースにおいて,主キーを設定する理由はどれか。
- 算術演算の対象とならないことが明確になる。
- 主キーを設定した列が検索できるようになる。
- 他の表からの参照を防止できるようになる。
- 表中のレコードを一意に識別できるようになる。
関係データベースの主キーの設定に関する記述として,適切なものだけを全て挙げたものはどれか。
- a 値が他のレコードと重複するものは主キーとして使用できない。
- b インデックスとの重複設定はできない。
- c 主キーの値は数値でなければならない。
- d 複数のフィールドを使って主キーを構成できる。
- a,c
- a,d
- b,c
- b,d
データベースにおける外部キーに関する記述のうち,適切なものはどれか。
- 外部キーがもつ特性を,一意性制約という。
- 外部キーを設定したフィールドには,重複する値を設定することはできない。
- 一つの表に複数の外部キーを設定することはできない。
- 複数のフィールドを,まとめて一つの外部キーとして設定することができる。
PCのキーボードではなく、DBMSにおけるインデックスに関する記述として、適切なものはどれか。
- 検索を高速に行う目的で,必要に応じて設定し,利用する情報
- 互いに関連したり依存したりする複数の処理を一つにまとめた,一体不可分の処理単位
- 二つの表の間の参照整合性制約
- レコードを一意に識別するためのフィールド
データベース設計
1. データベース設計とは
業務で使用するデータやデータ同士の関連性を整理して、どのように格納するかを決定することです。
家を建てるときに設計図が必要なように、データベースを作る前にもしっかりとした設計が必要です。
2. E-R図(Entity-Relationship Diagram)
データの関係性をエンティティ(実体)とリレーションシップ(関連)という2つの概念を使って表した図です。
関係データベースの設計図として使われます。
エンティティ(実体)
管理対象となる実体です。
例:顧客、商品、社員 など
リレーションシップ(関連)
エンティティとエンティティの関係を表します。
例:1対1、1対多、多対多
リレーションシップの種類と例
※表記法(矢印の形など)については試験問題文に指示があります。
例えば、校長と学校は1対1です。
例えば、学校と学生は1対多です。
例えば、学生と受講科目は多対多です。
3. 正規化
最頻出!
データが重複したり、データの更新の際に矛盾が生じたりしないように表を分けることです。
1つの表にごちゃ混ぜにデータを入れると、後で修正するときに大変なことになります。
【例】以下のようなテーブルで管理している場合
| 学生番号 | 学生名 | 教員名 |
|---|---|---|
| 1 | 山田太郎 | 伊藤一郎 |
| 2 | 佐藤花子 | 田中花子 |
| 3 | 鈴木一郎 | 田中花子 |
- 変更が大変:「田中花子」先生が結婚して苗字が変わった場合、2行分(佐藤さんと鈴木さんの行)を修正しなければなりません。修正漏れがあると矛盾が生じます。
- データが消える:もし山田太郎君が転向してレコードを削除すると、担任の「伊藤一郎」先生の情報まで学校から消えてしまいます(先生だけの管理簿がないため)。
正規化(表を分ける)する!
| 学生番号 | 学生名 | 教員番号 |
|---|---|---|
| 1 | 山田太郎 | 3 |
| 2 | 佐藤花子 | 1 |
| 3 | 鈴木一郎 | 1 |
| 教員番号 | 教員名 |
|---|---|
| 1 | 田中花子 |
| 2 | 松井秀樹 |
| 3 | 伊藤一郎 |
このように表を分けることで、矛盾も重複も回避できます。
過去問演習(データベース設計)
E-R図で表現するものはどれか。
- HDD内のデータの物理的な配置
- エンティティ同士の関係
- 処理の流れ
- 入力データ及び出力データ
関係データベースを構築する際にデータの正規化を行う目的として,適切なものはどれか。
- データに冗長性をもたせて,データ誤りを検出する。
- データの矛盾や重複を排除して,データの維持管理を容易にする。
- データの文字コードを統一して,データの信頼性と格納効率を向上させる。
- データを可逆圧縮して,アクセス効率を向上させる。
売上伝票のデータを関係データベースの表で管理することを考える。売上伝票の表を設計するときに,表を構成するフィールドの関連性を分析し,データの重複及び不整合が発生しないように,複数の表に分ける作業はどれか。
- 結合
- 射影
- 正規化
- 排他制御
データベース管理システムとデータ操作
1. DBMSとSQL
DBMS (DataBase Management System)
アプリケーションソフトウェアの要求に応じてデータベースを操作・管理するシステムです。
大量のデータを効率よく安全に扱うための「データベースの管理人」のような役割を果たします。
SQL
関係データベースを操作するための言語(命令文)です。
「データをください」「データを登録して」といった命令を、SQLという言葉を使ってDBMSに伝えます。
SQLによるデータベース操作の流れ
SQLで命令
操作
DBMSの主な3つの機能
- データ操作
データの検索、追加、更新、削除など - トランザクション管理
一連の処理の整合性を保つ - 排他管理
同時アクセスによる不整合を防ぐ
2. データ操作
データベースに格納されているデータを操作することです。特に以下の3つの操作(関係演算)が重要です。
表からある特定の行(レコード)のみを取り出す操作です。
| 番号 | 氏名 | 電話 |
|---|---|---|
| 1 | 山田 | 090-1111 |
| 2 | 佐藤 | 090-2222 |
| 3 | 鈴木 | 090-3333 |
「番号2」を選択
| 番号 | 氏名 | 電話 |
|---|---|---|
| 2 | 佐藤 | 090-2222 |
表からある特定の列(フィールド)のみを取り出す操作です。
| 番号 | 氏名 | 電話 |
|---|---|---|
| 1 | 山田 | ... |
| 2 | 佐藤 | ... |
| 3 | 鈴木 | ... |
「氏名」を射影
| 氏名 |
|---|
| 山田 |
| 佐藤 |
| 鈴木 |
複数の表を1つにする操作です。
| 氏名 | 教員ID |
|---|---|
| 山田 | 3 |
| 佐藤 | 1 |
| 教員ID | 教員名 |
|---|---|
| 1 | 田中 |
| 3 | 伊藤 |
教員IDで結合
| 氏名 | 教員ID | 教員名 |
|---|---|---|
| 山田 | 3 | 伊藤 |
| 佐藤 | 1 | 田中 |
その他の基本的な操作:
- 挿入 (INSERT):表に行を追加する。
- 更新 (UPDATE):行内のデータを変更する。
- 削除 (DELETE):表から行を削除する。
3. トランザクションと排他制御
トランザクション管理 重要
複数の処理を1つの処理としてまとめて実行することをトランザクションといいます。
トランザクション管理は、処理の途中でエラーが起きてもデータの整合性を保つための機能です。
- Aさんの口座から1万円引く
- Bさんの口座に1万円足す
もし1.が終わった後にエラーで止まると、1万円が消滅してしまいます。
だから「1と2をセットで成功させる」か「処理自体をすべてなかったことにする」のどちらかにする必要があります。
全ての処理が成功したら、変更結果を確定させる。
失敗したら、処理前の状態に戻す(取り消す)。
排他管理(排他制御)
複数のユーザーが同時にデータベースにアクセスする際に、データの不整合を防ぐ機能です。
ロック機能などを使って、「他の人は同時に触らないでね」とアクセス権を制限し、データの競合を防ぎます。
レプリケーション
データベースの内容をリアルタイムに複製(レプリカ作成)して同期する技術です。
これにより、データのバックアップや、メインサーバー故障時の切り替え予備、検索処理の負荷分散が容易になります。
過去問演習(DBMSとデータ操作)
情報システムに関する機能a~dのうち,DBMSに備わるものを全て挙げたものはどれか。
- a アクセス権管理
- b 障害回復
- c 同時実行制御
- d ファイアウォール
- a,b,c
- a,d
- b,c
- c,d
関係データベースの操作を行うための言語はどれか。
- FAQ
- SQL
- SSL
- UML
関係データベースで管理している"従業員"表から,氏名の列だけを取り出す操作を何というか。
- 結合
- 射影
- 選択
- 和
関係データベースの操作a~cと,関係演算の適切な組合せはどれか。
- a 指定したフィールド(列)を抽出する。
- b 指定したレコード(行)を抽出する。
- c 複数の表を一つの表にする。
- a-結合,b-射影,c-選択
- a-射影,b-結合,c-選択
- a-射影,b-選択,c-結合
- a-選択,b-射影,c-結合
トランザクション処理に関する記述のうち,適切なものはどれか。
- コミットとは,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態に戻すことである。
- 排他制御とは,トランザクションが正常に処理されたときに,データベースの内容を確定させることである。
- ロールバックとは,複数のトランザクションが同時に同一データを更新しようとしたときに,データの矛盾が起きないようにすることである。
- ログとは,データベースの更新履歴を記録したファイルのことである。
トランザクション処理におけるコミットの説明として,適切なものはどれか。
- あるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
- トランザクションが正常に処理されたときに,データベースへの更新を確定させること
- 何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
- 複数の表を,互いに関係付ける列をキーとして,一つの表にすること