◎データベースの種類と特徴
データベース(Data Base)ってなに?
>複数のアプリケーションまたはユーザによって共有されるデータの集合。
データの集まりをを表の形で表現するリレーショナル・データベースが主流。
直訳すると「データの基地」。
スキーマってなに?
>データベースの仕様を記述したもの。
●外部スキーマ(RDBではビュー)
利用者またはアプリケーションプログラムから見たデータベースの
姿である。概念スキーマの変更がアプリケーションに影響しない
「論理データの独立性」を保証。
▲▲▲▲▲▲▲▲▲
※ネットワークDBでは「サブスキーマ」
●概念スキーマ(RDBでは表)
現実世界を論理構造からモデル化したもの。
特定のDBMSとは独立している。
●内部スキーマ
概念スキーマで表されたモデルをそれぞれのDBMS上でどう物理的に
実現するかを記述したもの。物理構造の変更が概念スキーマや外部スキ
ーマに影響しない「物理データの独立性」を保証。
▲▲▲▲▲▲▲▲▲
※INDEX定義やデータ格納構造の定義
◎データベースモデル
●階層モデル
親レコード:子レコード=1:N
●ネットワークモデル
親レコード:子レコード=M:N
●関係モデル
列(アトリビュート)
┌──┬──┬──┬──┬──┐
行(タプル)│ │ │ │ │ │
├──┼──┼──┼──┼──┤
│ │ │ │ │ │
├──┼──┼──┼──┼──┤
│ │ │ │ │ │
├──┼──┼──┼──┼──┤
│ │ │ │ │ │
└──┴──┴──┴──┴──┘
◎DBMS
DBMS(Data Base Management System)ってなに?
>データを集中的に管理し、ユーザの要求に応じてデータをアクセスしたり更新した
りできるようにしたソフトウエア。
●DBMSの機能
○データベース定義機能
○データベース操作機能
○データベース制御機能
○トランザクション管理機能
○ユーザビュー機能
●DBMSの特徴
○データ独立性
データの特性や構造を変更しても、プログラムの変更を最小にできること。
ファイルとデータベースの大きな違いはここにある。
○アクセス管理
不正アクセス防止のため、アクセス権限の規則を明確にし、与えた権限を管理
すること。
○同時実行処理
複数のユーザが同時に使用しても大丈夫なように、排他制御機能を提供する。
◎データ分析
●E-R(Entity Relationship)モデル
実体(Entity)とそれらの間の関係(Relationship)を表現する。
概念モデルの図式的記法のひとつ。
□───◇───□
実体 ↑ 関連 ↑ 実体
関係 関係
○実体(エンティティ)
識別したデータの対象
※エンティティタイプ
複数のデータが同一の特性を持つ集合
※インスタンス
エンティティの実体値
○関連(リレーションシップ)
エンティティ間の結びつきを表現
○関係(カーディディナリティ)
エンティティ間の対応関係を表現
●拡張E-Rモデル(バックマン線図)
○1対1
□───□
○1対多
□──→□
※A→Bの場合、「1つのAは複数のBをXXする」「A動詞B」という形になる。
実装時にはBにA側の主キーを参照する外部キーが設定されることが多い。
※ある項目を主キーとしてもつエンティティと外部キーとしてもつエンティティには
「1対多」の関係が存在する。
○多対多
□←─→□
◎データベースの論理設計
●論理設計
概念設計によって作成された概念モデルを、特定のデータモデルに対応した論理モデ
ルに変換する。
●整合性制約機能
○参照制約
追加・更新及び削除時に、関連する表の外部キーと対応する主キーとで不一致が
発生しないようにする。
○存在制約
ネットワークデータベースにおける親子集合において、子レコードを存在可能と
するために、対応する親レコードを自動的に生成する。
○更新制約
データベース中のある項目を更新するとき、その項目が取り得る値かどうかを
検証する。
○形式制約
データベース中の項目のデータ型に関する条件、文字、数字、桁数などを検証
する。
◎データの正規化
データベースの冗長性を排除し、データの一貫性と整合性を図ったデータモデルを
作ること。
※メリット
データの一貫性と整合性が図れる。
※デメリット
頻繁にデータを参照する場合、アクセス数を減少させる目的で第1正規形のみ行う
ことがある。また参照のみで更新/削除を行わない場合は正規化を行わないことも
ある。
●第1正規形
表の中に繰り返し項目を1つも含まない形。
例)受注番号、注文日、顧客番号、顧客名、顧客電話番号
~~~~~~~~
受注番号、商品番号、商品名、個数、商品単価
~~~~~~~~ ~~~~~~~~
●第2正規形
第1正規形でありかつ主キー以外の属性が主キーに対して完全関数従属である形。
→複合キーをもつ表のうち、複合キーのどちらかが決まれば特定できる項目を分割。
例)受注番号、注文日、顧客番号、顧客名、顧客電話番号
~~~~~~~~
受注番号、商品番号、個数
~~~~~~~~ ~~~~~~~~
商品番号、商品名、商品単価
~~~~~~~~
属性(アトリビュート):実体がもつ特性(項目)。
主キー:レコードを一意に識別するための属性。
関数従属:属性Aの値が決まれば属性Bの値が一意に決まるとき、「BはAに
関数従属である」という。
完全関数従属:Bが全体集合Aに関数従属であり、かつBがAのどの部分集合に
対しても関数従属でないとき、「BはAに完全関数従属である」
という。
●第3正規形
第2正規形でありかつ主キー以外の属性の間に推移関数従属の関係がない形。
→主キー以外のある項目の値が決まると特定できる項目を分割。
例)受注番号、注文日、顧客番号
~~~~~~~~
顧客番号、顧客名、顧客電話番号
~~~~~~~~
受注番号、商品番号、個数
~~~~~~~~ ~~~~~~~~
商品番号、商品名、商品単価
~~~~~~~~
推定関数従属:BがAに関数従属、CがBに関数従属、AがBに関数従属でないとき
「CはAに推移関数従属である」という。
◎データベースのパフォーマンス設計、物理設計
●物理設計
ディスク容量見積り、論理データ構造のマッピング、データベースの性能評価などを
行う。
○ディスク容量見積り
○論理データ構造のマッピング
○データベースの性能評価
◎データベースの操作
●選択
条件を満たす行を取り出す。
●射影
条件を満たす列を取り出す。
●結合
同じ値をもつ列について2つの表を合わせる。
◎データベースを操作するための言語
・DDL(Data Definition Language)
データ定義言語。
・DML(Data Manipulation Language)
データ操作言語。
●ホスト言語方式(親言語方式)....埋め込みSQL
COBOLやFORTRANなどプログラム言語にDMLを組み込んで
データベースをアクセスする方式。
○モジュール言語方式
DMLで記述されたデータベースアクセスプロシージャをCALL文など
で呼び出す方式。
○埋め込み方式
原始プログラム中にデータベースアクセスの命令を直接記述してアク
セスする。
●利用者言語方式(対話型方式)
既存のプログラム言語とは独立にデータベース専用の言語を提供する
方式。
◎SQL(Structured Query Language)
関係データベース用のデータベース言語。
●SQL-DDL
○表定義(H11 問3)-------------------------概念スキーマ
CREATE TABLE 社員テーブル
~~~~~~~~~~~~
(社員番号,氏名,課コード,PRIMARY KEY(社員番号),
~~~~~~~~~~~主キー
FOREIGN KEY(課コード) REFERENCES (課テーブル)
~~~~~~~~~~~外部キー ~~~~~~~~~~外部キーに対応する表
○ビュー定義(H13 午後Ⅰ 問6)--------------外部スキーマ
ビュー:利用者が自分に関係のあるものだけを自分に適した形で取り出すこと。
元の表の列名を異なる名称で定義することができる。
※メリット(H15 午後Ⅱ)
テーブル構造の変更がプログラムに影響を与えない。
実表に1列追加されてもビューには影響がない。
CREATE VIEW 作業実績表
~~~~~~~~~~~
(作業コード,作業名称,見積時間,担当者コード,担当者名,所要時間)---(★)
AS SELECT D.作業コード,D.作業名称,C.見積時間,A.担当者コード,
~~~~~~~~~ A.担当者名,SUM(B.作業時間)
FROM 担当者表 A,作業日報表 B,工数見積表 C,作業表 D
WHERE D.作業区分コード=1 AND
A.担当者コード=B.担当者コード AND
A.担当者コード=C.担当者コード AND
B.作業コード =C.作業コード AND
B.作業コード =D.作業コード
GROUP BY D.作業コード,D.作業名称,C.見積時間,
A.担当者コード,A.担当者名
★実表と列名が異なる場合は必ず記述する。
※列名が同じ時は「.」で修飾する必要がある。
※所要時間が見積時間を超過する条件
ビュー:WHERE 所要時間 >見積時間
実 表:WHERE SUM(作業時間)>見積時間
→WHERE句に集合関数は使用できずエラーとなる。
○インデックス定義
CREATE INDEX インデックス名 ON 表名 (列名,列名...)
※WHERE句の条件に指定する。
※効果的なインデックス付与条件
・アクセス頻度の高い列
・更新のない列
・種類が多い列
・行数の多い列
・値の偏りのない列
○スキーマ定義
CREATE SCHEMA AUTHORIZATION 売上管理
~~~~~~~~~~~~~~~~~~~~~~~~~~~
CREATE TABLE 売上管理表
○権限定義
GRANT ALL PRIVILEGES ON 学生名簿 TO 教務課
~~~~~~~~~~~~~~~~~~~~ ~~ ~~
●SQL-DML
○データ抽出
SELECT 項目名1,項目名2・・・
FROM 表名1,表名2・・・
WHERE 条件
※WHERE句内で使用する表現
・または
WHERE 年齢 IN(10,20,30)
⇔ ~~
WHERE 年齢=10 OR 年齢=20 OR 年齢=30
~~ ~~
・以上/以下
WHERE 年齢 BETWEEN 10 AND 40
⇔ ~~~~~~~ ~~~
WHERE 年齢>=10 AND 年齢<=40
~~ ~~~ ~~
・否定(H12 問3)
WHERE NOT EXISTS
( SELECT *
FROM 注文明細テーブルB,注文テーブルC
WHERE B.注文番号=C.伝票番号 AND B.商品番号='1k10'
AND C.顧客番号=A.顧客番号)
>「SELECT *」:全ての項目を抽出する。
>「A.~」:主問い合わせで使用した表名は副問い合わせで使用しても良い。
・空欄
IS NULL
>「=NULL」はNG。
※グループ化(~ごとに)
(H9 午前問47)
SELECT AVG(年齢)
FROM 会員
GROUP BY グループ
HAVING COUNT(*)>1
~~~~~~~~~~~~~~~~~2つ以上存在するグループ毎に
(H11 問3)
SELECT X.社員番号,氏名,SUM(所定労働時間),SUM(残業時間)
~~~~~~~~~~~~~~~GROUP BY句があるSELECT句の項目には
集合関数のほかGROUP BY句で指定した
項目以外定義できない。
FROM 社員テーブル X,勤務実績テーブル Y
WHERE X.社員番号=Y.社員番号
GROUP BY X.社員番号,氏名
SELECT 社員番号,氏名
FROM 社員テーブル
WHERE 社員番号 =
(SELECT 社員番号
FROM 勤務実績テーブル
GROUP BY 社員番号
HAVING SUM(残業時間)>=50)
~~~~~~~~~~~~~~~~~~~~~~~~残業時間の合計が50時間以上の
社員番号毎にグループ化
◆◆◆◆◆◆◆◆
◆!!注意!!◆
◆◆◆◆◆◆◆◆
・WHERE句に集合関数は使用できない。
※集合関数:SUM、AVG、MAX、MIN、COUNT...
・集合関数を使用する場合は、集合関数を使用していない列全てをGROUP BY句に
指定する必要がある。
・グループ化する前に絞り込みたい条件はWHERE句に、グループ化した後に
絞り込みたい条件はHAVING句に指定する。
・WHERE句の中にあるSELECT文を「副問い合わせ」という。
比較術語「=」の後に副問い合わせ結果が複数存在する場合は
エラーとなってしまう。上記SELECT文は下記のようにするべき。
WHERE 社員番号 IN
(SELECT 社員番号~~
FROM 勤務実績テーブル
GROUP BY 社員番号
HAVING SUM(残業時間)>=50
※EXISTS、NOT EXISTS
※ソート(H13 午後Ⅰ 問6)
SELECT *
FROM 作業実績表
ORDER BY 作業コード ASC, 担当者コード ASC
~~~~~~~~ ~~~昇順 (降順は「DESC」)
※重複の排除(H10 問3)
SELECT DISTINCT 伝票番号,顧客名
~~~~~~~~~~~~~~~
FROM 売上表
WHERE 請求金額>=100000 AND
発行年月日>=19980301 AND 発行年月日<=19980331
○挿入
・1行追加
(H15 午後Ⅱ)
INSERT INTO 利用者台帳 (利用者番号,氏名) VALUES (98765,'凸山凹男')
~~~~~~~~~~~
・複数行追加(副問い合わせ利用)
INSERT INTO 商品表
SELECT 商品コード,商品名,単価
FROM 新商品表
WHERE 単価>0
○更新
(H15 午後Ⅱ)
UPDATE 利用者台帳 SET 住所 = 'B市E町4-5-6' WHERE 利用者番号 = 98765
~~~~~~ ~~~
○削除
(H15 午後Ⅱ)
DELETE FROM 利用者台帳 WHERE 利用者番号 = 98765
~~~~~~ ~~~~
○カーソル
関係DBの行を手続き型言語で処理する場合に1行ずつ親プログラムに渡す機能。
・定義
(H13 午後Ⅱ)
DECLARE カーソル空在庫 CURSOR FOR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~カーソルの宣言
SERECT *
FROM 空在庫
WHERE ホテルコード=入力ホテルコード
AND 室タイプ=入力室タイプ
AND 宿泊日 BETWEEN 宿泊開始日F AND 宿泊終了日
FOR UPDATE;
~~~~~~~~~~~更新のためのカーソル(メーカーによる)
更新目的でデータを読み込む場合、これを記述することで
検索対象行にロックをかけることができる。
・開く
OPEN カーソル空在庫
・読みこみ
FETCH カーソル空在庫 INTO ホテルコード,室タイプ
・閉じる
CLOSE カーソル空在庫
○トランザクション
・処理終了
COMMIT WORK
・取り消し
ROLLBACK WORK
◎関係代数
●関係代数
関係データベースの関係モデル(リレーショナルモデル)において、集合論と一階述
語論理に基づいて、関係として表現されたデータを扱う、コンピュータ科学における
代数的な演算の体系。
◎排他制御
●排他制御
複数タスクによる同時アクセスを制御し、データの整合性を保持する機能。
クリティカルセクション実行中にプリエンプションが発生しないようにする制御。
アプリケーションプログラムで明示的に指定することも出来る。
○排他ロック(占有ロック)
ほかのジョブやタスクからは使用できなくする。
○共有ロック
競合するジョブやタスクが両方とも読み取りのときに同時処理を可能とする。
▲▲▲▲▲▲▲▲
○デッドロック
複数のプロセスが同資源に対して互いに専有ロックをかけあうことで待ち状態と
なり行き詰まり状態に陥ること。
プロセスA プロセスB
│ │
↓ ↓
専有 要求─┬──→X←┐ ┌──要求 専有
│ │ └─│┐ │
↓ │ ││ ↓
待ち 要求─│─┬→Y←┬─┘├─要求 待ち
│ │ │ │ │ │
↓ │ │ │ │ ↓
待ち 開放─┘ │ │ └─開放 待ち
│ │ │ │
↓ │ │ ↓
待ち 開放───┘ └────開放 待ち
◎リカバリ処理
●リカバリ(障害回復)
チェックポイント
>データベースの書き出しとログの書き出しを一致させる時点。
<障害発生した際のための処理>
○ログ(ジャーナル)
更新したトランザクションの内容、および更新前の内容(ビフォアイメージ)と
更新後の内容(アフタイメージ)を記録。
○ミラーリング(バックアップ)
障害回復時のバックアップのため、全く同じ更新を複数の磁気ディスクに対して
行う二重化を即時実施。
<障害発生時の処理>
○ロールバック(後退復帰)
トランザクション障害発生時に用いる方法。
ログ(ジャーナル)を使用して、更新前状態に戻すこと。
▲▲▲
○ロールフォワード(前進復帰)
媒体障害発生時に用いる方法。
ミラーリング(バックアップ)を使用して、障害前状態まで戻す。
▲▲▲
コミットってなに?
>メモリ上の更新情報をデータベースに反映させること。
障害発生直前の
チェックポイント システム障害発生
│ │
────┼─────────────┼───→時間
T1 │ T2 T3 │
←─→ │←─→ ←────→
│ T4 │
←─┼─────────────┼─→
│T5 │
←───→ │
│ │
T1:チェックポイント・障害発生以前に完了しているのでリカバリは行われない。
T3,T4:障害発生時更新中であるため、更新前状態に戻す。(ロールバック)
T2,T5:障害発生以前に完了しているので障害前状態まで戻す。(ロールフォワード)
※DBの処理(応答)時間では入出力処理はボトルネックとなる。
RDBMSではディスクの入出力効率向上の為にいったんメモリ上の
バッファに更新して、チェックポイントでメモリ上のバッファの
内容をディスクへ書き出す。
┌──────────────────┐
│┌───────┐┌───────┐│
││ログバッファ ││データバッファ││ バッファ
│└───┬───┘└───┬───┘│
└────┼────────┼────┘
↓ ↓
┌─────┐ ┌────┐
│ジャーナル│ │バック │
│ファイル │ │アップ │ ディスク
└─────┘ └────┘
コミット時 チェックポイント時
◎トランザクション管理
トランザクションってなに?
>ユーザからみたデータベースに対する処理単位。
●トランザクションのACID特性
○原子性(Atomicity)
トランザクションはそれ以上分解されてはならない。つまり、すべて完了(コミ
ット)するか全く実行されない(ロールバックする)かで終了すること。
○一貫性(Constensy)
トランザクション実行にともなうデータ変化は一貫性がなければならない。
○独立性(Isolation)
トランザクションは、ほかから影響を受けてもいけないし影響を与えても
いけない。
○耐久性(Durability)
コミットしたデータは必ずデータベースの中に存在することを保証し、障害から
守らなければならない。
◎分散データベース
分散データベースって何?
>物理的に離れた場所の複数のコンピュータシステムに接続されたデータベースを
論理的に一つのデータベースとして、あたかも1つのデータベースのようにアクセス
できるようにしたもの。
●RDA(Remote Database Access:遠隔データベースアクセス)
遠隔地のデータベースをアクセスするためのインタフェース。SQL言語。
OSI基本参照モデルの第7層(アプリケーション層)の規格の一つ。
長所:データベースの物理的な位置を気にせずに使える。
短所:セキュリティや障害回復の点で問題がある。
●透過性
データベースが分散していることを意識させない性質。
○局所マッピング透過性
DBMSのアクセス方法の統一。
○分割透過性
データの分割を意識させない。
○位置透過性
物理的な位置を意識させない。
●2相コミット(2フェーズコミット)
○第1相
更新の要求元が処理先に対して更新の保証処理を依頼。このとき、各処理先は
「セキュア状態」。
セキュア状態ってなに?
>処理終了すること(コミット)ももとの状態に戻す(ロールバック)することも
可能な状態。
○第2相
更新の要求元が各処理先からの応答を判断してコミット(正常処理)かロールバック
(異常処理)かを決定。
●3相コミット(3フェーズコミット)
2相コミットでは、セキュア状態を確定後コミット処理を行う間に障害が発生した
場合には一貫性が失われるため、もう1段階実施する。
短所:ネットワーク負荷がかかり性能を悪化させる。
●レプリケーション(複製データベース機能、レプリカ機能)
ネットワーク上にあるデータベースの複製(レプリカ)に対し、マスタの更新内容
を自動的に一定時間毎に複製するしくみ。
▲▲▲▲▲
●データディクショナリ/ディレクトリ
データベースに納められたデータの項目名や存在場所などを管理するもの。
・集中処理方式では、データベース処理が増加すればデータディクショナリ/ディ
レクトリを保有するサイトに付加が集中する可能性がある。またそのサイトの
障害の影響は、分散データベース全体に及ぶ。
・分散処理方式では、問い合わせに対してほかのサイトを調べることはない。