Keywords:キー,Bツリー,B+ツリー,ISAM,セグメント・キー,マルチ・キー,直接編成ファイル,C言語用の関数ライブラリ
データベースのフィールドをキーとして索引を作成し,そのキーのデータ型(文字列や数値など)に対応した順序でアクセスできるファイル編成方式をISAMと呼びます.そうでないデータがただ単に並んでいるデータ・ファイルは直接編成ファイルと呼びます. ISAMはデータ本体部と索引部とに分かれており,索引部のキーからそのキーが属するデータ本体部のレコードを迅速に取り出すことができます.また索引部はキーの値の順にアクセスできるので,データ本体部を物理的にソートして並べかえなくても,見かけ上ソートすることができます. 索引部の設計にあたっては,キーの並べ方(昇順あるいは降順),重複するキー値を許すか否かも指定する必要があります. ほとんどの場合,索引部はBツリーまたはB+ツリーと呼ばれるデータ構造になっていて,データ本体部のキー・フィールドの更新(追加・変更・削除)に伴って,動的に効率よく索引部の内容を更新することができるようになっています. ISAMはdBASEなどのデータベース・システムの中に組み込まれているタイプのほかに,C言語用の関数ライブラリあるいはINT呼び出しで使用するメモリ常駐型のものなどがあります.< copyright 1994 佐藤有一 >トップに戻る
キー
データベースのレコードを一意的に指定できるフィールドをキーと呼びます. 通常は,データ本体部のレコードを特定のフィールドのデータ型に従った順序で並べたい場合や迅速に検索したいフィールドがある場合に,そのフィールドをキーとして索引部を作成します. キーの構成の仕方によってセグメント・キーやマルチ・キーなどの種類があります.トップに戻るORISAMトップに戻るセグメント・キー
複数のフィールドを結合して1個のキーにしたものです.例えば,定価と商品名という2個のフィールドを結合して1個のキーとして索引部を作成したものがセグメント・キーです.キーは結合したフィールドの順に並ぶので,まず定価順に並び,定価が同じならば商品名順に並びます.トップに戻るORISAMトップに戻る直接編成ファイル
ファイル・ポインタを1レコード分ずつ増減すればデータ・ファイルを順次アクセスできます.また,ファイル・ポインタを所定のレコード分増減して移動すれば,いわゆるランダム・アクセスができますが,高度な用途には向いていません.B+ツリー
Bツリーと基本的には同じですが,リーフ・ノードのみがデータ本体部のレコード位置をもつという点が異なっています. キーの値の順にレコードを取り出す順次処理(インデックス・ソート)の場合に,B+ツリーではリーフ・ノードだけを順にアクセスしていけばよいので高速な処理ができます.トップに戻るORISAMトップに戻るマルチ・キー
索引部に複数のフィールドのキーをまとめて格納したものです.キーの先頭にキー・フィールドを特定する内容のヘッダをつけることによって,個々のキーごとにアクセスできます. キーごとに独立した索引部をもつ必要がないので,データ本体部と索引部がひとつのファイルになっているISAMで複数のキー・フィールドをもつためにはマルチ・キーとする必要があります.索引部が独立したファイルになっているISAMでは,オープンする索引ファイルの数を節約することができます.トップに戻るORISAMトップに戻るBツリー
キーとそのキーが属するデータ本体部におけるレコード位置を対として,これを複数個まとめたノードがツリー状にアクセスできるようにポインタで連結したものです.ツリー構造の根にあたる部分はルート・ノード,末端の葉にあたる部分はリーフ・ノードと呼びます.ノードは1個のルート・ノードから始まって,ノード内の個々のキー対がそれぞれ1個の子供のノードをもつかたちで連結されています.ただし,リーフ・ノードは子供のノードをもっていません. 1個のノードのサイズは,効率的にファイル・アクセスができるように,セクタ長と同じかその整数倍の大きさとするのが普通です.キーはノード内でその大きさの順に並んでおり,ノード内のキーは単純にリニアに検索されます. キーを追加・変更・削除する場合,それがノード内のみで操作できるならば多くても数10個のキーの配置を変更するだけなので簡単に処理できます.ノード内がキーで一杯になって新しいノードを追加しなければならない場合でも,索引部の末尾に新しいノードを作成して,そのノードと連結するためにポインタを変更するだけですむので,高速に効率的にこれを実行できます.キー対がすべて削除されて空になったノードは一時的にツリー構造からポインタが外されますが,新しいノードを追加する時には優先的にポインタで連結され使用されるようになります.C言語用の関数ライブラリ
様々なソフトハウスから独自にISAMライブラリが市販されています.利用するデータベースの種類,構築するデータベースの規模などに合ったライブラリを導入しなければなりません.下表に示すのはインデックス関数の例です.x_create() | 新しいインデックス・ファイルを作成 |
---|---|
x_open() | インデックス・ファイルをオープン |
x_close() | インデックス・ファイルをクローズ |
x_close2() | コピーしたハンドルでインデックス・ファイルをクローズ |
x_top() | 先頭のキーに移動 |
x_bottom() | 末尾のキーに移動 |
x_insert() | キーを挿入 |
x_delete() | キーを削除 |
x_delete_c() | 現在位置のキーを挿入 |
x_erase() | インデックス・ファイルを消去 | /tr>
x_next() | 次のキーを得る(次のキーへ移動) |
x_previous() | 前のキーを得る(前のキーへ移動) |
x_current() | 現在のキーを得る |
x_find() | キー値でファイルを検索(検索条件に合ったキーに移動) |
x_find_kp() | キー値とファイル・ポインタで検索 |
x_write_memo() | ヘッダ部のメモ領域にメモを書き込む |
x_read_memo() | ヘッダ部のメモ領域からメモを読みき込む |
x_get_info() | インデックス・ファイルの情報を得る |
x_get_ver() | インデックス・ファイル関数のVer番号を得る |
x_get_root() | ルート・ノードの未使用バイト数を得る |
x_copy_frame() | インデックス構造だけをコピー |
x_copy() | インデックス・ファイルをコピーして新しいファイルを作成 |
x_pack_idx() | インデックス・ファイルを作りなおす(空ノードは削除) |
x_sheck_idx() | インデックス・ファイルの内容をチェック |
Keywords:環境定義ファイル,環境設定,Xbase言語,システム・テーブル,リレーショナル処理,データ変換
初期の8ビット・パソコン用のデータベース・システムとして登場したdBASEUが急速に普及した結果,それと互換性をもつ多くのデータベース・システムが開発されてきました.現在ではdBASEVPLUSおよびdBASEW互換のデータベース・システムを総称してXbaseと呼んでいますが,将来はdBASEとは独立した一般的な名称として使われるようになるでしょう. Xbaseが起動されると,最初に環境定義ファイルを読み込んで,画面制御や入出力などの環境設定をします. データベースのフィールドとして文字列,数値,日付けなどの固定長のデータ型のほかにメモ型という可変長のフィールドをもつことができます.索引付きのデータベースを作成できるので,多量のデータを迅速にソートしたり検索することができます. データ検索条件の設定,データ入力用の画面設計,印刷用のレポートやラベルの書式設計などを対話式に行う機能があり,プログラムを作成しなくてもかなりのデータベース操作が可能ですが,このような対話的な操作方法はXbase製品によって相違があるのが現状です. このようにXbaseはデータベース操作を対話式に行えますが,アプリケーション開発のための言語ももっています.このXbase言語はもともとデータベース操作のための問い合わせの機能しかもたない言語でしたが,現在ではビジネス・アプリケーション開発言語として必要な機能をもつ高度な言語に発展しています. Xbaseのシステム・テーブル機能とリレーショナル処理はデータベース・システムと称するからには必要不可欠な機能といえます. 異なるデータ形式のファイルを変換して(データ変換)読み書きできるので,ほかのデータベース・システムとの間でデータを相互利用することができます.< copyright 1994 佐藤有一 >Xbaseの扱うファイルの種類についての説明 トップに戻る ORXbase トップに戻る
環境定義ファイル
Xbaseにおいて,MS-DOSのCONFIG.SYSと同様な役割をもつファイルです. 起動時に環境定義ファイルで定義された環境が設定されますが,そこで定義されていない環境はデフォルトの状態に初期化されます.トップに戻るORXbaseトップに戻る環境設定
Xbaseにおける環境設定を大きく分類すると次のようになります.リレーショナル処理
データ変換
Xbaseで扱うDBFデータ形式をほかのデータベースや表計算ソフトで扱うことができるデータ形式にCOPY TOコマンドで変換することができます.その逆にAPPEND FROMコマンドでほかのデータ形式をDBFデータ形式に変換することができます.システム・テーブル
データベースのフィールド名やデータ型,データ長などのデータ構造を定義したデータベースのことをシステム・テーブルといいます.データベース・システムが扱うデータベース自身でデータ構造を定義できると,それをデータベースの新規作成やデータ構造の変更に使用することができます. データベースを作成するためには対話式のCREATEコマンドを使用しますが,システム・テーブルが使用できれば,それに代わるプログラムをユーザが作成することができます.Xbase言語
Xbase言語の言語としての性格はBasicと似ているといってよいでしょう.作成したプログラムはDOコマンドによって実行します.Basicと同様に,実行するためにデータベース・システムが必要なインタプリタ型と単独で実行可能なEXEファイルを作成するコンパイラ型のXbase言語があります. ANSI(米国標準規格委員会)では,Xbase言語の規格化が進められています.Windows対応版も含めてXbase製品における言語仕様の共通化が高まれば,さらにビジネス・アプリケーション開発言語として普及していくことでしょう.トップに戻るORXbaseトップに戻るXbaseの扱うファイルの種類
Xbaseはデータベース本体のファイルのほかにもさまざまな形式のファイルを扱います.これらのファイルには固有の拡張子が与えられています.以下に代表的なファイルを説明します.(Relational DataBase)Keywords:リレーショナル・モデル,スキーマ,データベース管理システム,データ保護,障害回復機能,一貫性制御機能,正規化,集合演算,関係演算
RDBの理論的体系は,IBMのE. F. コッド氏によって提唱されたリレーショナル・モデルです.その基本は集合と関係の概念を用いてデータを処理するということです. データベースをより抽象的なレベルで考えた場合,3層スキーマを完全に実現できるデータベース管理システムがRDBといえます. データベースがRDBであるか否かの判定は,データベース内部の論理的,抽象的なレベルで決めるべきであり,外観的なユーザ・インターフェースとは関係がありません. 個人や企業における情報とその情報の流れを,コンピュータ上に論理的に置き換えるという記述ができるのがRDBの特徴ですが,より効果的にデータベースを構築するためには,RDB内部で行われている処理の論理的な構造を理解することが大切です. RDBにはリレーショナル・モデルの要件を満たすことが望まれるだけでなく,データ保護と障害回復機能が要求されます.これらの機能はRDBに限らず,データベース管理システムとして当然備えていなければならないものです.< copyright 1994 佐藤有一 >トップに戻る
3層スキーマ
ANSI(米国標準規格委員会)から提案されている,データベース管理システムがサポートすべき機能を概念化したものです.実際の世界に存在する情報(例えば,企業の顧客台帳や売上伝票)とその処理業務をコンピュータ内のデータ・モデル(例えば,売上データベース)に置き換えて処理するための指針を与えるものです. (1) 概念スキーマ 企業における業務の流れ,情報の処理形態を,コンピュータ内のデータベース構造やデータベース操作に置き換えることができるように概念モデル化します.概念スキーマではファイルやレコードという用語は使用しないで,より抽象化されたテーブルや行,列という用語を使用します.単にスキーマとも呼びます. (2) 内部スキーマ 概念スキーマを実際の記憶装置(ハード・ディスク)の上にどのように構築するかを示す部分です.データ本体やISAMファイルなどのファイル編成方式などのデータ構造およびデータを操作するアルゴリズムが定義されます.内部スキーマという考え方をすることによって,データの物理的独立性が達成されます. (3) 外部スキーマ アプリケーションのデータベースに対する論理的データの独立性を達成するために考え出されたもので,概念スキーマとアプリケーションとのインターフェースといえます.SQLがその具体例です.サブスキーマとも呼びます.データベース管理システム
DBMS(DataBase Manegement System)
データ保護
データベースを破損するような異常なアクセスを禁止したり,アクセス権限によってユーザーからのアクセスを制限する機能です.アクセスできるデータベースの範囲やアクセスの種類(リードのみ可,更新可,データ構造変更可など)のレベルを設定して,不法なアクセスができないように管理します.DBMSはアクセス権限レベルの判断を,ユーザに与えられたユーザ名やパスワードによって行います..トップに戻るORRDBトップに戻る障害回復機能
データベースの更新履歴を常時作成しておき,なんらかの事故でデータベースに障害が発生した時に,この更新履歴を元にしてデータベースを事故発生直前の状態に復元する機能です. また,電源異常などのハードウェア的な異常が発生した場合に,現在アクセス中の処理をすみやかに終了するとともに新たなアクセスを禁止し,警報を発する機能なども含まれます..トップに戻るORRDBトップに戻るリレーショナル・モデル
リレーショナル・モデルとしての要件は次のようなものです.一貫性制御機能
リレーションが設定されたテーブル間の参照関係に矛盾が生じないようにするために,入力できるデータの範囲を制限したり,内容の重複したキーの存在をチェックする機能のことです.例えば,ほかのテーブルで参照されているデータを削除するような操作は禁止されなければなりません.データベースが正規化されていれば,参照関係の一貫性は維持しやすいと言えます..トップに戻るORRDBトップに戻るデータベースの正規化
ほかのテーブルに存在する列(フィールド)と同じ内容のデータを(キーとなる列を除いて)重複してもっていないデータベースを正規化されているといいます.ほかのテーブルの列を自分のテーブルにもちたい場合は,キーによる参照によってこれを実現します. 正規化されていないデータベースは,データの一貫性を保持するために複数のテーブルの重複している列を同時に更新しなければならないために,扱いにくいデータベースとなります.複数のテーブルをキーで参照するようなデータベースを構築する場合には,データが正規化された状態になるようにテーブルを設計することが必要です..トップに戻るORRDBトップに戻る集合演算
▼合併(和)………複数の集合のすべての要素を集めます. ▼差………………複数の集合において,一つの集合にしか存在しない要素を集めます. ▼共通部分(積)…複数の集合のいずれにも含まれている要素を集めます. ▼直積……………複数の集合のすべての要素のすべての組み合わせです. 集合論では,直積の中で実際に存在し,ある条件を満たす組み合わせを関係といいます.トップに戻るORRDBトップに戻る関係演算
Windows用リレーショナル・データベース
エンド・ユーザにリレーショナル・データベースを使いやすくするためにGUIが活用されます.従来からWindows用にもリレーショナル・データベースはありましたが,最近マイクロソフト社から「アクセス」という製品が出ています.アクセス自体もRDB処理ができますが,ほかのRDBに対しても透過にアクセスできる機能(アタッチ)ももっています.バージョン1.1の例 | インポート | エクスポート | アタッチ |
---|---|---|---|
Access同士 | 〇 | 〇 | 〇 |
dBASEW | 〇 | 〇 | 〇 |
dBASEV | 〇 | 〇 | 〇 |
桐V4 | 〇 | 〇 | |
Paradox 3.x | 〇 | 〇 | 〇 |
Btrieve | 〇 | 〇 | 〇 |
FoxPro 2.5 | 〇 | 〇 | 〇 |
FoxPro 2.0 | 〇 | 〇 | 〇 |
SQLデータベース | 〇 | 〇 | 〇 |
(Structured Query Language)Keywords:SQLの命令文,カーソル,スキーマ,ビュー
SQLは当初,IBM社のリレーショナル・データベースの問い合わせ言語SEQUELとして開発されました.現在では国際的に規格化されており,パソコンから汎用機に至るまでデータベース・アクセス言語の業界標準になっています. SQLの命令文は,行と列からなる表を定義するデータ定義命令文と表を操作するデータ操作命令文とからなります. SQLデータベースのデータ構造やデータの物理的なアクセス手順はアプリケーション・プログラムから独立しているので,ハードウェアやOSあるいはSQLデータベースを変更した場合でも,アプリケーション・プログラムのSQLで記述した部分は共通して使用することができます. 複数の表がリレーショナル処理によって更新された場合でも,表の参照関係はSQLデータベースが管理するので,アプリケーション側で処理する必要はありません.整合性を崩すような操作をしようとすると,エラーが返されて実行できないようになっています. SQLそのものは非手続き型の言語なので,C言語やBasicなどの手続き型の言語やデータベース・システムに付属する第4世代言語などと組み合わせて使用します.したがって,SQLデータベースは手続き型の言語からSQLを使用してアクセスできるような仕組みをもつ必要があります.このSQLと手続き型言語とのインターフェースをフロント・エンドと呼びます.これに対して実際のデータベース操作をする部分をバック・エンドと呼びます.< copyright 1994 佐藤有一 >トップに戻る
標準SQLの命令文
カーソル
SQLにおけるカーソルとは,通常のデータ・ファイルにおけるレコード・ポインタに相当するものですが,単に表における行位置を指し示すだけのものではありません.処理の対象になる表を指定するとともに,検索条件などが設定されている行単位の処理を行うために,その行を特定するものです.処理対象とする複数の表の組み合わせと検索条件などを指定し,その作業表でカーソルを使用する宣言をします.カーソルを開き,カーソル位置の行を取り出して更新する,というように使用します.トップに戻るORSQLトップに戻るスキーマ
複数の実表やビューの定義およびそのアクセス権の定義を総括したもので,アプリケーションやユーザごとに定義されるような大きなデータベースのグループ単位のことです.トップに戻るORSQLトップに戻るビュー
複数の表の行や列を,ある条件を指定して組み合わせた仮想的な表のことです.実際にそのような表が作られるわけではありませんが,ユーザからは実在する表(実表)と同様にアクセスできます.SQLデータベースはビューに対するアクセスを実表の行,列へのアクセスに自動的に変換して処理します.(Query By Example)Keywords:QBE,問い合わせ演算子,問い合わせコマンド,標識要素,Paradox
QBEは,もともとはIBM社の汎用機用データベースの問い合わせインターフェースでした.現在では Paradox,dBASEW などのパソコン上のデータベース・システムで使用できます. QBEは画面上部に表示されたフィールド名の下に検索条件などを記述して問い合わせフォームとします.テーブルそのものを画面上で確認しながら条件を設定できるので,直感的でわかりやすい問い合わせインターフェースとなっています. ただし,画面上での操作を前提にしているために,SQLのように言語による問い合わせはできません.また,画面上における対話式操作のユーザ・インターフェースに関して標準化された規格がないので,検索条件を入力する手順や使用するキーボードのキーなどはデータベース・システムによって異なっています. 問い合わせた結果はAnswerと呼ぶ一時的に作成されるテーブルに出力され,画面下部に表示されますが,その出力先名を指定したテーブルに変更して保存することもできます. 問い合わせフォームには問い合わせ演算子を使用して検索条件を設定するばかりでなく,問い合わせコマンド(予約語)を使用して条件に合致するレコードの追加,更新,削除などのデータベース操作を設定することができます. 複数のテーブルにまたがる問い合わせフォームを設定する場合は,テーブルごとに問い合わせフォームを記述して,標識要素を共通項目として,指定したフィールドを結合します.< copyright 1994 佐藤有一 >トップに戻る
標識要素
複数のテーブルは同じ種類のデータが登録されている項目で結合します.この共通項目を,問い合わせフォーム内の該当する項目に標識要素として指定します.共通項目は項目名が同じである必要はありませんが,データ型は一致していなければなりません.トップに戻るORQBEトップに戻るQBE問い合わせフォームの例
問い合わせ演算子(Paradoxの場合)
算術演算子 | + − * / ( ) | ( ) は問い合わせ式の グループ演算子 |
---|---|---|
比較演算子 | = > < >= <= | |
ワイルド・カード | . . | 任意の文字列 |
@ | 任意の1文字 | |
特殊演算子 | LIKE | 綴りが似ている |
NOT | 該当しない | |
BLANK | 値がない | |
TODAY | 今日の日付け | |
OR | 項目にOR条件を指定 | |
, | 項目にAND条件を指定 | |
AS | Answerテーブルに 項目名を指定 |
|
! | 該当しなくても全レコード を表示する |
|
集計演算子 | AVERAGE | 値の平均を計算する |
COUNT | 値の件数を計算する | |
MAX | 最大値を計算する | |
MIN | 最小値を計算する | |
SUM | 値の合計を計算する | |
ALL | 重複値も含めて集計する | |
UNIQUE | 重複値は含めないで集計する | |
集合比較演算子 | ONLY | 定義した集合の要素のみに該当する レコードを表示 |
NO | 定義した集合の要素に該当しない レコードを表示 |
|
EVERY | 定義した集合の全要素に該当する レコードを表示 |
|
EXACTLY | ONLYとEVERYを結合した機能 |
問い合わせコマンド(予約語)(Paradoxの場合)