第7章 交換技術

第9章 ソフトウェア技術
9.1 プログラミング言語
9.2 オペレーティングシステム
9.3 データベース技術
9.4 マルチメディア技術
9.5 ソフトウェア開発
9.3 データベース技術
9.3.1
9.3.2
9.3.3
9.3.4
データベースとは
データベースの設計
データベース管理システム
分散データベース
9.3.1 データベースとは
(1) データベースの目的
データベースとは,
各種の役に立つ情報を格納し,
これらの情報を簡単に検索したり,
データ間の整合性を保つことができるようにするシステム。
以下の目的を持つ.
① データ独立性 : データをプログラムから独立させる.
② データ共有 : 複数のシステムで重複しているデータを
一元管理する.
③ データ保全 : 多数のアクセスでも壊れたり,
ロックアウトを起こさせない.
④ 障害回復
: 障害が発生しても速やかに回復する.
⑤ 機密保護
: 利用者に応じて利用できるようにし,
権限のない者にはアクセスさせない.
(2) データベース管理システム
データベースを構築するため,
専用の管理システムを開発する場合もあるが,
データベースを構築するための
基本的な手続きとソフトウェアをあらかじめ用意し,
これらの手続きに従ってデータベースを構築することが多い.
データベースを構築するためのソフトウェアを
データベース管理システムという。
(3) データベースでの3階層モデル化
現実に利用されているデータベース管理システムの多くは,
次の3階層でモデル化する.
この3階層をANSI/SPARCS 3層スキーマと呼ぶ.
スキーマとは,データベースの具体的な記述のことである.
① 概念スキーマ : 格納するデータを,現実世界から捉えた見方で
論理的に定義.
② 外部スキーマ : 利用者の立場やプログラムからみたデータを定義.
③ 内部スキーマ : 物理的な記録形態から捉えた定義.
概念スキーマをコンピュータシステムで
どう具体化するかを記述する.
(4) データベースでのモデル化手法
① E-Rモデル
: 現実世界を,人間が認識する実体(エンティティ:Entity)と
実体間の関係(リレーションシップ:Relationship)で捉え,
E-R図で表現する.
② 関係モデル
: データを行と列の2次元の関係表で表現し,
複数の関係表の集合モデルとして表現する.
表を「関係」,行を「タプル(組)」,列を属性として示す.
③ 階層型モデル : データを親子関係の階層構造として表現する.
1つの親は複数の子を持つことができるが,
子は複数の親を持つことができない.
④ 網型モデル
: 階層型モデルを基本とするが,子も複数の親を持つことが
できる.親子関係はポインタで結ばれ,
この様子がネットワークになっているので網型と呼ばれる.
9.3.2
データベースの設計
(1) 設計手順
効率の良いデータベースを構築するには,
① 業務でどのようなデータが使われているかを把握(業務分析)
② 冗長性の排除,一貫性の確保,整合性のとれた構成等を検討(正規化)
等を行ったうえで設計を行う必要がある.
項目洗出しの後,第一正規化,第二正規化,第三正規化を行う必要がある。
なお,第三正規化を強化したボイスコッド正規化,第四正規化,第五正規化が
ある.
(2) 項目の洗い出し
人事記録カードから取得資格のデータベースを構築する例を挙げる.
例えば,人事記録カードから次のような項目を洗い出したものとしよう.
繰返し部分
職員番号 氏名 年齢 部署コード 部署名 資格コード 資格名 取得年 登録番号 資格コード
このままの形でデータを作成すると,例えば次のように不定長になる.
11001 山田孝雄 43 E02 技術営業部
24578 白井賢一 20 S01 システム開発部
13025 酒井和子 25 S03 経理部
12345 飯田義男 33 S01 システム開発部
J01 第一種情報 1985
J02 第二種情報 2000
J02 第二種情報 2001
J01 第一種情報 2002
110027356 J00 特種情報 1991 12560234
201275846
217632327 T02 簿記二級 1996 47665211
220034645
(3) 第一正規化
第一正規化では,繰り返し項目を分離して,固定長にする.
但し,分離する際のキー項目の妥当性を確認する.
ここでは職員番号+資格コードで,レコードを特定することができる.
なお,例えば,技術士など複数部門での取得が可能な場合もある.
従って,この時点で,資格コードのコード体系等について
再検討をしなければならないこともある.
ここでは,複数部門で取得可能な資格については,
部門別に別コードが設定されているものとする.
第一正規化の結果
職員番号 氏名 年齢 部署コード 部署名 資格コード 資格名 取得年 登録番号
この形を第一正規形と呼ぶ.
第一正規形のデータは,次のように固定長となる.
11001 山田孝雄 43 E02 技術営業部
11001 山田孝雄 43 E02 技術営業部
24578 白井賢一 20 S01 システム開発部
13025 酒井和子 25 S03 経理部
13025 酒井和子 25 S03 経理部
12345 飯田義男 33 S01 システム開発部
J01 第一種情報 1985
J00 特種情報 1991
J02 第二種情報 2000
J02 第二種情報 2001
T02 簿記二級 1996
J01 第一種情報 2002
110027356
12560234
201275846
217632327
47665211
220034645
(4)第二正規化
職員番号 氏名 年齢 部署コード 部署名 資格コード 資格名 取得年 登録番号
第二正規化では,第一正規形から,あるひとつの項目が決まれば,
他のデータ項目が一意に決まってしまう(これを部分関数従属という)項目を
分離する.矢印が部分関数従属の関係である.
なお,含まれているキーの全部が決まらない限り,
一意に決まらない関係を完全関数従属と呼ぶ.
ここでは,職員番号と資格コードという2つのキーに対して,
取得年あるいは登録番号が完全関数従属している.
第二正規化の結果
職員情報
職員番号 氏名 年齢 部署コード 部署名
資格情報
資格コード 資格名
資格取得情報
職員番号 資格コード 取得年 登録番号
第二正規化を行った結果,すなわち第二正規形では,上記の
種類の表に分離されることになる.
データも次のように3つに分かれる.
職員情報
11001 山田孝雄 43 E02 技術営業部
24578 白井賢一 20 S01 システム開発部
13025 酒井和子 25 S03 経理部
12345 飯田義男 33 S01 システム開発部
資格情報
J00 特種情報
J01 第一種情報
J02 第二種情報
T02 簿記二級
資格取得情報
11001 J01 1985 110027356
11001 J00 1991 12560234
24578 J02 2000 201275846
13025 J02 2001 217632327
13025 T02 1996 47665211
12345 J01 2002 220034645
(5)第三正規化
職員情報
職員番号 氏名 年齢 部署コード 部署名
資格情報
資格コード 資格名
資格取得情報
職員番号 資格コード 取得年 登録番号
第三正規化では,第二正規形から,キー以外の関数従属を見つけて分離する.
職員番号が決まらないと,氏名,年齢,部署コード,部署名は決まらないが,
職員番号がきまらなくても,部署コードが決まると部署名が決まる.
すなわち部署名は,部署コードに関数従属している.
そこで,職員情報から,部署名を切り離すことになる.
第三正規化の結果
職員情報
職員番号 氏名 年齢 部署コード
資格情報
資格コード 資格名
資格取得情報
職員番号 資格コード 取得年 登録番号
部署一覧 部署コード 部署名
職員情報
11001 山田孝雄 43 E02
24578 白井賢一 20 S01
13025 酒井和子 25 S03
12345 飯田義男 33 S01
部署一覧
E02 技術営業部
S01 システム開発部
S03 経理部
資格情報
J00 特種情報
J01 第一種情報
J02 第二種情報
T02 簿記二級
資格取得情報
11001 J01 1985 110027356
11001 J00 1991 12560234
24578 J02 2000 201275846
13025 J02 2001 217632327
13025 T02 1996 47665211
12345 J01 2002 220034645
(6)その他
職員情報
職員番号 氏名 年齢 部署コード
資格情報
資格コード 資格名
資格取得情報
職員番号 資格コード 取得年 登録番号
部署一覧 部署コード 部署名
以上,形式的に正規化の手順を踏んできたが,各項目の表現が妥当か
どうかについては触れてこなかった.
項目決めを行った段階で,データをどのように変更するかについて,
直感的な判断も必要となる.
今,職員情報を見てみよう.ここに「年齢」という項目がある.
年齢は,誕生日がくるたびに変更しなければならない.
いつの時点の年齢かを項目として増やして自動的に変更することもできるが,
これを誕生日に変更すれば,データベースの変更は不要となる.
その他の結果
職員情報
職員番号 氏名 誕生日 部署コード
資格情報
資格コード 資格名
資格取得情報
職員番号 資格コード 取得年 登録番号
部署一覧 部署コード 部署名
職員情報
11001 山田孝雄 1959/05/23 E02
24578 白井賢一 1982/01/17 S01
13025 酒井和子 1977/10/08 S03
12345 飯田義男 1969/09/04 S01
部署一覧
E02 技術営業部
S01 システム開発部
S03 経理部
資格情報
J00 特種情報
J01 第一種情報
J02 第二種情報
T02 簿記二級
資格取得情報
11001 J01 1985 110027356
11001 J00 1991 12560234
24578 J02 2000 201275846
13025 J02 2001 217632327
13025 T02 1996 47665211
12345 J01 2002 220034645
9.3.3 データベース管理システム
(1) データベース管理システムとは
データベースを構築するためのミドルウェアであるデータベース管理システム
(DBMS:Database Management System)を使って構築することが多い.
DBMSは,いわば利用者とOSの間の仲立ちをするシステムということができる.
DBMSは,データベース作成,運用時の制御などの管理を行うシステムであり,
以下のような機能から構成される.
① 定義機能
② 操作機能
③ 排他制御機能
④ 障害回復機能
⑤ 機密保護機能
データ辞書とDDS
データベース管理システムでは,データベースの格納場所,
データベースの名前,定義情報等に関する情報を格納する領域が必要である.
この領域をデータ辞書(Data Dictionary)と呼び,
この情報を管理するシステムを
データ辞書システム(DDS:Data Dictionary System)と呼ぶ.
DDSは,データの冗長性の排除や構築や保守等の支援を目的とする.
ACID特性
データベースでは,トランザクションにおけるデータベースの一貫性を
保証しなければならない。この特性をACID特性と呼ぶ。
特
性
A 原子性(Atomicity)
C 同一性(Concurrency)と
一貫性(Consistency)
I 隔離性(Isolation)
D 耐久・
持続性(Durability)
意
味
すべて変更完了か,変更されていないかの
どちらかで処理を終了。
従って,変更途中という状態は存在しない。
データベース内容に矛盾がないこと。
複数処理の同時実行結果と
逐次処理の結果が等しいこと。
処理が完了した時点で,
障害等によって結果が異ならない。
(2) データベース管理システムの機能
データベース言語
データベース管理システムでは,
利用者や管理者がデータベースの構造を定義したり,
操作を行うための指定するための方法が標準化されている.
定義方法や指定方法をデータベース言語と呼ぶ.
データベース言語は,以下のように分類できる.
① データ定義言語(DDL):データベースの構造等を定義する.
② データ操作言語(DML):データ操作を指定する。
[用語] DDL:Data Definition LanguageまたはData Description Language
DML:Data Manipulation Language
(a) 定義機能
定義機能では,データ構造(スキーム)を,
① 概念スキーマ
② 外部スキーマ
③ 内部スキーマ
の3階層に分けて記述する
.
例えば,関係データベース型では,以下の定義を行う。
① 概念スキーマをスキーマ定義言語(SQL-DDL)で記述
② 外部スキーマ(関係データベースではビューと呼ぶ)のうち,
利用者が必要な部分だけをSQL-DDLで定義する.
③ 内部スキーマでは,データベースの物理的情報を定義する.
(b) 操作機能
利用者がデータベースを操作するための機能.
次のような操作のための方式がある.
① 親言語方式
COBOLやFORTRANなどの手続き型言語で記述された
プログラムの中から操作する方法.
操作するには,プログラミングが必要.
② 利用者言語方式
特定のDBMS専用の言語を使用する方法.
プログラミングは必要としないが,
DBMSに用意された操作しかできない.
③ コマンド方式
データ操作用のコマンドを用いる方法.問合せ方式とも呼ぶ.
(c) 機密保護機能
機密性の高いデータベースの場合,
① データベースにアクセスできる利用者を制限するアクセス制限機能
② データベースのアクセス範囲を制限する機能
が必要である.
利用者制限では,通常,ユーザの識別コード,パスワード等を
組み合わせて用いる.
但し,DBMSのパスワード管理は甘いことが多いので,
悪意ある手口によって破られるおそれが強い.
従って,識別コード,パスワード以外の防御対策が必要である.
(d) 排他制御機能
複数の利用者が,同時に同じデータにアクセスしたときの整合性を保つ
ための機能.デッドロック状態に陥った場合,
これを解消するためのプログラムの強制終了などの処理が必要となる.
デッドロックや排他制御を簡単に行うため,ひとつのプロセスだけが
データベースのアクセスを行い,
プログラムは,データベースアクセス用プロセスにコマンドを発行して
アクセスを行う方式もある.
この方式を採用する場合,アクセス用のコマンドやアクセス結果は,
それぞれ待ち行列(キュー)に置かれることになる.
デッドロック状態の例
データベース
プログラムA
読込み可能
X
Read X
×
プログラムB
読込み可能
Read Y
プログラムA
によるロック
ロック解除
まで待ち
Read Y
×
Y
プログラムB
によるロック
ロック解除
まで待ち
Read X
待ち行列によるデッドロックの回避
プログラムA
データベース
X
プログラムB
Y
Read Y
Read X
DB アクセス
Read Y
A:Read X
B:Read Y
A:Read Y
B:Read X
A:Xの値
B:Yの値
A:Yの値
B:Xの値
Read X
(e) 障害回復機能
データベースに障害に発生した場合に,なるべく速く障害から
回復するための機能.
障害が起きた原因と場所を特定するには,調査資料となる記録をとる
ログ収集機能が最低限必要である.
記録となるファイルをログファイル,ジャーナルファイル等という。
障害から復旧するために,定期的にデータベースの内容を保存しておき,
障害が発生した時点で元に戻す作業が行われる.このためのファイルを
バックアップファイルと呼ぶ。
システムを自動的に復旧するための機能が備わっているDBMSもある.
例えば,ロールバック処理機能は,実行中のプログラムが
異常終了したとき,プログラム実行前の状態に戻す機能である.
ロールフォワード処理機能は,データベースの格納媒体が
物理的に破損した場合に復旧する機能である.
9.3.4 分散データベース
(1) 分散データベースとは
分散データベース(Distributed Database)とは,
ネットワーク上に分散させたデータベースである。
利用者はデータがどこにあるかを意識せず,
1つのデータベースであるかのように利用することができる。
これを透過性または透明性という。
ただし,分散データベースでは,
データが矛盾なく更新されるよう制御する必要がある.
(2) 分散データベースの形態
水平分散と垂直分散に大別することができる.
① 水平分散(Horizontal Distribution)
分散データベースを構成する各システムが,
ほぼ同等の機能を持つよう構成をもち,
各データベースの処理を,それぞれのコンピュータで処理する.
② 垂直分散(Vertical Distribution)
本来は,センターのコンピュータで
集中一括管理されていたデータベースを,階層的に分割し,
複数のコンピュータで処理を行う方式.
上位の処理を上の階層のシステムが行い,
下位の処理を下の階層のシステムが行うもので,
階層によって機能の差がある.
(3) 2相コミットメント
分散データベースでは,複数のデータベースを
矛盾なく更新する必要がある.
この方法のひとつに,2相コミットメント,3相コミットメントがある.
2相コミットメントでは,更新確定を2段階に分けて行う.
すなわち,更新確定もロールバックもできるというセキュア状態という
中間的な状態を設定し,その後,実際の更新確定を行う方式である.
2相コミットメントの手順
① トランザクション完了サイトは,他のサイトに
コミット可否を問い合わせる。
② 問い合わされたサイトは,コミット可能であれば了解を返して
セキュア状態に入る。
③ 了解を受け取ったトランザクション完了サイトは,
相手にコミット実行を指示する。
④ コミット実行を指示されたサイトは実更新を行う。
トランザクション
完了サイト
コミット可否問合せ
コミット可否
問合せ
データベース
格納サイト
コミット可能であれば
了解を返却
了解
コミット実行
指示
コミット実行指示
セキュア
状態
実更新
(4) レプリケーション(複製)
負荷分散を目的に重複データを作成する際の機能.
主として分散データベースが遠隔地にある場合,
レプリケーション(複製)という方法が採用される.
遠隔サイトでは,あらかじめ決められた時間間隔で,
主サイトのマスタデータベースの内容を自分のデータベースに複写する.
通常は,複製データをマスタデータベースの替わりにアクセスする.
マスタデータベースとの整合性確保と回線負荷の軽減ができるので,
遠隔地にデータベースが分散しているときに採用される.
9.3 データベース技術
完