第五章 ファイルとデータベース

5.1 ファイル
ここでは、ファイルの概念を理解しよう。
また、ファイルの種類と、その目的・用途を知ろう。

□ファイルとは
◇ファイルの概念
日常生活でもよく使われる「ファイル」という言葉は、コンピュータの世界でも同様の意味で用いられる。
一般的に定義すると、「ある目的のために、関連した情報(データ)を集めた1つの単位」となる。
◇ファイルの構成要素
ファイルは、図5−1のような構成になっている。
フィールド
論理的に意味のある情報の最小単位。
項目に当たる。
1つのフィールドをさらに細分し、サブフィールドを設ける場合もある。
レコード
フィールドの集まりからなり、1回の情報処理(たとえばREAD、WRITE)の対象となる単位。
1商品や1取引に関する情報に当たる。
論理レコード
1回の情報処理の対象となる単位。
狭義のレコードと同じ。
物理レコード
記憶媒体上での、入出力の対象となる単位。

□分類別に見るファイルの種類
◇利用者による分類
・システムファイル
コンピュータシステムが、運用のために使用するファイル。
保守用ログファイルなど。
・ユーザファイル
ユーザが用意するデータやプログラムなどを格納したファイル。
◇使用目的による分類
・基本(マスタ)ファイル
業務システムの基本となるデータを格納したファイル。
商品マスタファイルなど。
・変動(トランザクション)ファイル
業務システムで逐次発生するデータを格納したファイル。
売上伝票ファイルなど。
◇利用期間による分類
・永久(保存)ファイル
業務システムが稼動している間、利用されるファイル。
各種マスタファイルなど。
・一時ファイル
処理の中で、一時的につくられるファイル。
各種作業ファイル、トランザクションファイルなど。

□ファイルの記憶媒体
ファイルをコンピュータで処理するために、ファイルを記憶しておく媒体が必要である。
ファイルの記憶媒体としては、磁気テープや磁気ディスク、光ディスク等がある。
◇磁気テープ
・構造
データ(レコード)は、BOT(Beginning Of Tape)マーカとEOT(End Of Tape)マーカではさまれた部分に記憶される。
データはレコード単位で記録されるが、いくつかのレコードがまとめてブロックとして記録されるのが一般的である。
1ブロック当たりに含まれるレコード数をブロック化係数とよぶ。
ブロックまたはレコードの間には、データの区切りとしてIBG(Inter Block Gap)またはIRG(Inter Record Gap)が挿入される。
IBG、IRGはデータが記録されない部分である。
読み書き用の磁気ヘッドは一般に9個備わっており、磁気テープ上にはテープ走行方向に9本のトラックが存在する。
9個の磁気ヘッドで同時に読み書きできるビット集まりをフレームまたは列とよぶ。
1フレームは8ビットのデータビットと1ビットのパリティビットから構成される。
したがって、1フレームは1バイトのデータを記録することができる。
磁気テープ上のデータの記録密度の単位として、1インチ当たりのビット数を表した、BPI(Bit Per Inch)が多く用いられている。
・特徴
 ・安価で大量のデータが記録できる
 ・順処理に向く(直接アクセスはできない)
・記憶容量とアクセス時間
 記憶容量
=ブロック数×ブロック長×記録密度
=テープの全長/(ブロック長+IBG長)×ブロック長×記録密度
 アクセス時間(1ブロック転送時間)
=(ブロック長/データ転送速度)+起動停止時間
=(ブロック長/(記録密度×テープ速度))+起動停止時間
◇磁気ディスク
・構造
何枚ものディスク盤が重ねてあり、それぞれのディスク盤の面に対して読み書き用のヘッドが1つずつある。
1枚のディスク盤にはトラックとよばれる同心円状の帯が何重にもあり、そのトラック上にデータを記録する。
各ディスク盤の同じ直径のトラックを点線で結ぶと円筒ができる。
この円筒をシリンダとよぶ(図1−3参照)
磁気ディスクのデータのアクセス方法は、読み出したいデータの入っているトラックへヘッドを動かし、読み出したいデータが回転してくるのを待ち、やってきたところで読み出す、というステップを踏む。
このアクセス時間は、読み出したいデータがトラック上のどの部分にあるかによって、回転待ちする時間が変化することから、平均時間をとるのが通常である。
・特徴
 ・順次アクセス、直接アクセスのどちらも可能
 ・磁気テープに比べ、更新処理が容易に行える
・記憶容量とアクセス時間
 記憶容量
=1ボリューム当たりのシリンダ数×1シリンダ当たりのトラック数×1トラック当たりのバイト数
 アクセス時間(1ブロック当たりの平均アクセス時間)
=平均位置決め時間(シーク時間)+平均回転待ち時間
 (サーチ時間)+データ転送時間
=平均位置決め時間+平均回転待ち時間+(ブロック長+IBG長)/転送速度
◇光ディスク
・構造
ディスク盤を回転軸を中心に回転させ、読み書きヘッドでデータをアクセスする点は磁気ディスクと同じである。
しかし、光ディスクは読み書きをレーザ光により行う。
光ディスクには追記型のものと書換え型の2種類がある。
追記型は、媒体の被膜にレーザ光で微小な孔をあけることによりデータを記録する。
データの読み出しは、反射光により行う。
書換え型は、レーザ光で媒体を磁化することによってデータを記録する。
このことから、書換え型の光ディスクは、光磁気ディスクともよばれる。
MOは書換え型の光ディスクである。
光ディスクのデータアクセス方法は、基本的に磁気ディスクと同じである。
・特徴
 ・順次アクセス、直接アクセスのどちらも可能
 ・ビット当たりのコストが安い
 ・寿命が長い

□ファイルの管理
ファイル管理の方法の1つに、ディレクトリがある。
◇ディレクトリ
ファイルを管理する、フォルダの役目をするもの。
ディレクトリには複数のファイルや、複数の別のディレクトリを格納することが可能である。
ファイルを操作するためには、そのファイルが格納されているディレクトリにアクセスしなければならない。
ディレクトリが階層構造をとっていた場合、目的のディレクトリに達するまで、階層をたどらなければならない。
UNIXやWindowsでは木構造をとっている。
◇木構造ディレクトリ
ディレクトリが木の階層構造をとるものをいう。
木の(root)に当たるものがルートディレクトリ、木の節点(node)に当たるものがサブディレクトリ、木の(leaf)に当たるものがファイルである。
ルートディレクトリは(もしくは\)で表す。
・カレントディレクトリ
現在アクセスしているディレクトリ。
・パス名
すべてのファイルがもつ、ルートディレクトリからの経路情報。
ルートディレクトリを基点とする完全パス名と、カレントディレクトリを基点とする相対パス名がある。
図5−4のようなディレクトリ構造の場合、ファイルdのパス名は、次のようになる。
 完全パス名 \C\E\d
 相対パス名 E\d
◇ファイル名
UNIXやWindowsではファイル名は、「ファイル名.拡張子」で表される。
ファイル名を指定する際、‘*’や‘?’のワイルドカードの使用が可能である。
‘*’は長さ0以上の任意の文字列を表し、‘?’は任意の1文字を表す。
 A*.TXT→A.TXT、ABCDE.TXT等
 A?.TXT→A1.TXT、AB.TXT等

5.2 ファイルの編成法
ここでは、ファイルの編成法と、その特徴を知ろう。

□順編成ファイル
◇順編成ファイルの構造と特徴
・構造
 図5−5参照

レコード#1 レコード#2 レコード#3
レコード#4 ・・・
 
 

・特徴
 ・ファイルの大きさに制限がない
 ・レコードを順に並べていくので、記憶効率がよい
 ・全レコードに対して処理をするのに適し、特定のレコードに対する処理には向かない
◇ファイルの処理方法
・アクセス方法
順次アクセスのみ。
・更新方法
磁気テープの場合
レコードの書き換え、追加、削除は、新しいファイルを作成することによって行う。
磁気ディスクの場合
レコード長の変化を伴うレコードの書き換え、レコードの途中への追加、物理的なレコードの削除に関しては、新しいファイルの作成が必要。

□直接編成ファイル
◇直接編成ファイルの構造と特徴
・構造
 図5−7参照。
・特徴
 ・キー値から目的レコードのアドレスを求めるため、アクセス時間が短く、また一定である
 ・レコードがファイルの先頭から格納されないため、記憶効率がよくない
 ・複数のキー値から同一のアドレスが求められてしまう場合がある(シノニムの発生)
◇ファイルの処理方法
・アクセス方法
直接アクセス。
アドレスの求め方には、大きく次の2つがある。
直接アドレス法
レコードの中のキー項目を、直接、アドレスとする。
キー項目とアドレスが1対1に対応するので、レコードが大量の場合には向かない。
間接アドレス法
キー項目の値に何らかの計算を施し、アドレスに変換する方法。
レコードが記憶領域内に均等に割り付けられるように、アドレス変換を行う。
アドレス変換には、除算法、基数変換法などが用いられる。
ただし、この場合には、シノニムが発生することを考慮しなければならない。
シノニムの対策方法としては、同一のアドレスに変換されたレコードをチェーンでつなぐ、チェーン法などがある。
・更新方法
 図5−8参照。

□索引編成ファイル
◇索引編成ファイルの構造と特徴
・構造
記憶領域は、次の3つに分かれる(図5−9)。
索引域:レコードキー値からレコードをアクセスするための目次。
マスタ索引、シリンダ索引、トラック索引からなる。
基本データ域:レコードが、レコードキー値の順に格納される。
あふれ域(オーバフロー域)
レコードが新しく追加された場合、基本データ域に入りきらないレコードがここに格納される。
あふれ域のレコードは、ポインタでチェーンにつながれ、チェーンをたどってアクセスされる。
あふれ域のレコードが増えると、アクセス時間が著しく低下するので、ファイルの再編成を行う必要がある。
・特徴
 ・レコードキーの昇(降)順による順次アクセスも、特定のレコードキーによる直接アクセスも可能である
 ・構造が複雑なため、順編成に比べると記憶効率はよくない
 ・レコードの追加、削除によって、記憶効率、アクセス時間が悪化した場合、ファイルの再編成が必要である
◇ファイルの処理方法
・アクセス方法
順次アクセスと直接アクセスがある。
順次アクセス
索引の順にレコードを読む。
ファイルの先頭からレコードを読む場合と、ファイルの途中から読む場合があり、後者のアクセス方法を、動的ダイレクト)アクセスとよぶことがある。
直接アクセス
レコードキー値から、マスタ索引、シリンダ索引、トラック索引を順に探索し、目的のレコードを読む。

□区分編成ファイル
◇区分編成ファイルの構造と特徴
・構造
登録簿(ディレクトリ)とメンバに分かれる(図5−10)。
登録簿(ディレクトリ):メンバの名前、格納場所などを記憶する。
メンバ:順編成ファイルである。
・特徴

 ・メンバ単位に処理が行える。
  1つのメンバに1つのプログラムを格納し、プログラムファイルとして使用するのに適する
 ・メンバの更新処理を行うたびに無効領域ができるため、定期的にファイルを圧縮する必要がある
◇ファイルの処理方法
・アクセス方法
直接アクセス。メンバ名を指定する。

□VSAMファイル
◇VSAMファイルの構造と特徴
・構造
次のものから構成される(図5−11)。
CI(Control Interval):入出力の論理的な単位で、一定の大きさをもつ。
CA(Control Area):連続した複数個のCIからなる。
コンポーネント:連続した複数個のCAからなる。
VSAMカタログ:データセット(ファイル)を管理するための登録簿。
・特徴

 ・汎用コンピュータで、仮想記憶が可能なOSに固有のファイル編成法である
 ・順編成、直接編成、索引編成ファイルのすべての特徴を併せもつ。
  それぞれ、入力順データセット(ESDS:Entry Squenced Data Set)、キー順データセット(KSDS:Keyed Sequenced Data Set)、相対レコードデータセット(RRDS:Relative Record Data Set)とよぶ

5.3 データベース
ここでは、ファイルと比較して、データベースの特徴を説明できるようになろう。
また、データベースの型の種類と、それぞれの構造と利用法の概要を理解しよう。

□データベースとは
◇データベースの概念
データベースとは、複数の利用者が、あたかも自分だけのためのデータファイルであるかのように、それぞれの立場で使うことができるものである。
データベース技術とは、いままでそれぞれ独立して存在していた「ファイルを統合」し、それを「複数の利用者(業務プログラム)で共有」し、「維持管理を一元的に行う」ことを可能にしたものである。
◇データベースの必要性
そもそもデータベースが登場したのは、次にあげるファイルの問題点を解決するためであった。
・データの独立性が低い
ファイルはプログラムと1対1に対応して存在するため、あるファイルに修正が入った場合、そのファイルに関係するすべてのプログラムを修正しなければならない。→保守コストが増大
・デ−タの無駄が多い

プログラムごとに使用するファイル様式が決まっているため、同じデータを複数のファイルにもつ必要がある。
・データ矛盾の発生

重複データが多いと更新漏れが起きやすくなる。→データの信頼性の低下
・データの安全性が低い
ファイルでは機密保護、障害回復などの機能があまり充実していない。
◇データベースの特徴
これらの問題点を解決するのがデータベースである。
データベースの特徴は、以下のとおり。
・データの独立性が高い

データはプログラムとは別に管理される。
・データの統合
データを一元的に管理するため、特定業務ごとにファイルを設計する必要がない。
・データの信頼性が高い
データを一元的に管理するため、更新漏れが起きない。
・データの安全性が高い
機密保護、障害回復などの機能が充実している。
なお、データベースシステムには、必ずデータベース管理者が存在し、利用者の必要とするデータ定義、生成、保守などを行う。

□データベースの種類
◇階層(木構造)型データベース
データベース内のデータ構造が階層構造になっているデータベース(図5−12)。
親レコードは複数の子レコードをもてるが、子レコードは、ただ1つの親レコードしかもてない。
◇網(ネットワーク)型データベース
CODASYL型ともいう。
各レコード間の関係づけが網目状になっているデータベース図5−13)。
階層型と違い、子レコードは複数の親レコードをもつことができる。
データベース言語として、NDLがある。
◇関係(リレーショナル)データベース
1970年にE.F.コッドによって提唱された、リレーショナルモデルに基づいたデータベース(図5−14)。
階層型、ネットワーク型と異なり、行と列からなる2次元の表形式でデータを表現する。
データベース言語として、SQLがある。

製品コード 製品名 原 価
A100 フライパン 2000
A300 1500
B050 湯沸し器 13000


5.4 SQLによるデータの操作
データ操作言語SQLを使用して、データベースを利用できるようになろう。

□データベースの作成
◇スキーマの作成
データベースは、複数のスキーマから構成される。
スキーマはその下に複数の表、ビューをもち、それらに関する権限を定義する。
CREATE SCHEMA文によって定義される。
例)スキーマ認可識別子「飯島」によって所有させるスキーマを作成する。
CREATE SCHEMA
 AUTHORIZATION 飯島
◇表の作成
表は、複数の行(タプル)と列(アトリビュート)からなる2次元の構造をもつ。
CREATE TABLE文によって定義される。
例)表「製品台帳」を作成する。
表「製品台帳」は製品番号、製品名、区分、原価の属性からなる。

CREATE TABLE 製品台帳
(製品番号 CHAR (4) NOT NULL
製品名 NCHAR (5) NOT NULL
区分 NCHAR (5) NOT NULL
原価 INT (6) )

◇ビューの作成
1つ以上の表から導出される仮の表である。
あたかも実在の表のように利用できるが、記憶媒体上には存在しない。
CREATE VIEW文によって定義される。

CREATE VIEW 表名 [(列名 [,列名] ・・・)]
AS 問い合わせ指定
[WITH CHECK OPTION]

例)表「製品台帳」によって、区分が東京であるデータを、「東京在庫」というビュー表で操作できるようにする。

CREATE VIEW 東京在庫(製品番号、製品名、原価)
AS SELECT 製品番号、製品名、原価
FROM 製品台帳
WHERE 区分="東京"


□データベースの利用方法
◇データの問い合わせ
リレーショナルデータベースのデータを問い合わせるために基本となる操作は、次の3つである(図5−15)。
・選択(selection)
表の中から特定の条件に合致した行を取り出すこと。
・射影(projection)
表から特定の列だけを取り出すこと。
・結合(join)
2つ以上の表から1つの表をつくり出すこと。
これら3つの基本操作を、次の指示によって実現する。
例)表「製品台帳」から、原価が1000円台の製品名を、原価とともに調べる。
 SELECT 製品名、原価
  FROM 製品台帳
  WHERE  (原価 >= 1000) AND (原価 < 200)
◇データの副問い合わせ
SQLでは、探索条件に問い合わせ指定ができる。
これを副問い合わせという。
例)区分が大阪である製品の原価に対し、そのどれをも上回る原価の製品を求める。
 SELECT 製品名
  FROM  製品台帳
 WHERE   原価 > ALL
  ( SELECT 原価
    FROM  製品台帳
   WHERE   区分 = "大阪")
◇その他、データベースの更新
・行の挿入
・行の削除
・データの更新


□埋め込み型SQLによるデータ操作
◇カーソル操作
SQLは非手続き型言語であり、SQLの問い合わせ指定は、複数の行からなる導出表を作り出す。
これを、COBOLやFORTRANなどの手続き型言語で書かれたプログラムとともに用いるには、問い合わせによって得られた導出表を1行ずつ取り出して、プログラムに渡す必要がある。
そのための機能を実現するのがカーソルである。
カーソルを用いた処理を行うのに、次のような命令文がある。
・OPEN CURSOR文
カーソルを開く命令。
これを実行すると、問い合わせが行われて導出表(作業表)が作成される。
・FETCH文
開かれているカーソルから1行ずつデータを取り出すのに用いる。
・CLOSE CURSOR文
カーソルの使用を終え、閉じた状態にする。
カーソルが閉じられた時点で、作業表は削除される。
◇埋め込み型SQL
COBOL、FORTRANなどの親言語の中に、直接書きこめるように設計されたSQLが、埋め込み型SQLである。
埋め込み型SQLは以下のようになる。


TOPへ  第六章へ