# Chapter 1: はじめに

## 1.1 概要

Empressは、C/C++プログラミング言語を用いた、データベース構造へのアクセス用に、mxルーチン及びmrルーチンという 2セットのデータベース操作プロシージャを提供します。ここでのインタフェースは、 パーサーが個々の呼出しに対して起動 されないため、どのクエリーインターフェースよりも実行時間が短くなります。また、検索データの実行をより強力に制御し 、複合算術演算の実行、独自に定義できる出力フォーマットの作成など、高レベルのユーザインターフェースでの開発を可能 にします。ただし、データベース操作プロシージャの使用は、シェルインタフェースや標準Cインタフェースを使用する場合に 比べ、多くのプログラミング労力を必要とします。

mxルーチンは、mrルーチンに比べ簡素であり、大部分のアプリケーションプログラムに適しています。mrルーチンは、 アプリケーションが特に複雑であったり、処理速度が重要視される場合に使用するのに適しています。

## 1.2 仮想データベースマシンとしてのmrレイヤー

ユーザの観点から見た場合、Empress RDBSはデータベースに対して、構造的にアクセスするインタフェース(SQL、4GLなど） の集まりに見られます。これらのインターフェースはすべて、データベースユーザが直面する最も一般的な問題に対し、 様々なレベルにおいて、専門のプログラミング言語を提供します。 実装方法の視点から見て、システム(SQLプロセッサーempsql、4GLプロセッサーemp4glなど)のほとんどのコンポーネントは、 mrレイヤー(Empressの機能を十分な範囲で実装する、1セットのC機能)でプログラムされています。 したがって、mrレイヤーは、Empressデータベースに無制限のアクセスを提供する、ただ一つのソフトウェア層です。 言い換えれば、mrはEmpress RDBMSの、他のすべてのレイヤーを支援する根本的な仮想データベースマシンです。

最下層のライブラリに対するアクセスを、ユーザに対して提供していることは、Empressのユニークな特徴です。 mrルーチンは、Empressデータベースにアクセスする最も速い手段を提供しています。一方、それら関数の使用はとても複雑です。 どのような人がmrレイヤーを使用するかと聞かれた場合、最もシンプルな答えは、処理時間を重要視する、アプリケーションを 作成したことのある、C/C++プログラマーです。 しかし、mrレベルでのプログラムは複雑です。私たちは、それらのアプリケーションのより高いレベルの、プロトタイプを最初に 書くように、ほとんどのユーザに助言します。この最初のレスポンス時間により、ユーザはmxかmrか、どちらでプログラムする か判断してください。

mrは、データベースにアクセスするためのC関数を提供する、ただ一つのEmpressライブラリではありません。 mxレイヤーは、より高い層(empsqlまたはプリコンパイラより下の層で)にmr機能の一部を提供します。 mxレイヤーは、mrレイヤーで実装されていることは明らかですが、それはあまり効率的ではありません。 複数のテーブルを結合して処理するような、mxルーチンでプログラムすることができない、いくつかのオペレーションが あります。 データベースへアクセスするアプリケーションは、ほとんどmxで十分に効率的です。しかし複雑なアプリケーションや 、処理速度を重視するようなアプリケーションでは、mrルーチンの使用が適応です。

## 1.3 mrとmxインタフェースの比較

mxとmrインタフェースは、SQLやプリコンパイラーインタフェースよりも、Empressデータベースにアクセスする、より 高度な機能を提供します。mxとmrインタフェースの間には、その実装方法の中に違いがあります。mrのほうが より多くの関数を提供しています。以下に、プログラムする上でmrおよびmxの間の、主要な機能差を要約します。

1. mrは同時に複数テーブルにアクセスできますが、mxは同時に1つのテーブルしかアクセスできません。

2. mrは、アプリケーション中で、検索したレコードに対してロック／アンロックができます。またテーブルをロック したり、解放する関数があります。

3. mrでは、集計関数を使用できます。(mrgfunc()関数を使用）

4. mrでは、テーブルへのアクセスを早くするために、データベースのオープン／クローズ関数があります。

5. mrでは、ディレクトリーがEmpressデータベースか、テストする関数があります。

6. mrでは、複雑な表現を構築する事が可能です。それは、その後条件ディスクリプタを構築するのに、使用 することができます。よってEmpressの組込み関数や、ユーザ定義関数、数学関数を使用することが できます。

7. mrでは、サブクエリー使用したような、複雑な条件を構築するための、沢山の関数が用意されています。

8. mrでは、各種ディスクリプタ（テーブル、レコード、フィールドなど）を使用した、プログラミングを提供します。 mxでは、そのような構造体に直接アクセスする、手段は与えられていません。

9. mrでは、内部フォーマットで処理するのではなく、外部フォーマット（文字列）で処理する方法を、mxより多く 提供しています。

10. 一般的に、mrルーチンはmxルーチンに比べて高速です。

11. mrには、以前に検索したレコードへのポインタを格納したり、後でそのレコードを再検索することができる 関数を持っています。

## 1.4 サポートされるC言語バージョン

mrルーチンは、UNIXシステムで実行される、Cプログラミング言語のほとんどのバージョンをサポートします。 また、それらはC++プログラムから呼出しが可能です。

Windowsシステムでは、mrルーチンはMicrosoft VC++をサポートします。

## 1.5 例題で使用されるデータベース

mrルーチンを解説するために、使用されるプログラム例は、repairsという名前のデータベースにアクセスします。 このデータベースには、personnelテーブルとloansテーブルがあります。personnelテーブルには、従業員に関するデータ、 番号(number)、名前(name)、電話番号(phone)、クレジット限度額(credit_limit)のフィールドがあります。 loasnテーブルには、従業員のローン情報、名前(name)、ローン日付(date)、ローン金額(amount)があります。この2つの テーブルを作成するコマンドを以下に示します。

       CREATE personnel (number INTEGER, name CHAR (25, 1),
            phone CHAR (15, 1), credit_limit dollar (6, 1));

       CREATE loans (name CHAR (25, 1),
            date DATE (1), amount DOLLAR (6, 1));

       *** Table: personnel ***

       number     name          phone        credit_limit

       10         Kilroy        426-9681     $500.00
       3          Jones         667-2951     $500.00
       5          Mosca         544-2243     $750.00
       17         Wladislaw     723-6073     $600.00
       8          Peterson      978-6060     $250.00
       4          Scarlatti     961-7363     $100.00

テーブルは、それぞれ以下のレコードを格納しています。

       *** Table: loans ***

       name          date                 amount

       Mosca         2 February 1992      $150.00
       Jones         7 February 1992       $33.95
       Kilroy        16 February 1992     $250.00
       Wladislaw     27 February 1992      $55.00
       Jones         3 April 1992          $25.00
       Mosca         4 May 1992           $200.00
       Wladislaw     12 May 1992           $25.00
       Peterson      6 June 1992           $50.00
       Wladislaw     25 June 1992          $75.00
       Jones         12 August 1992       $300.00
       Jones         25 December 1992     $100.00

上記2つのテーブルを持つデータベースを作成し、このマニュアルで提供される、サンプルプログラムの実行でアクセス されます。

データベースディレクトリ配下での、アプリケーションの実行、またはテストをしないでください。データベースファイルを 破壊する危険があります。

## 1.6 リファレンス

このマニュアルは、読者がCプログラミング言語、およびデータベースに熟知している事を想定しています。もし、そうでない 場合には、以下にリストされているリファレンスを参照してください。

Database

Date, C. J. | (1995). An Introduction to Database Systems Addison-Wesley, Reading, Mass., 6th. ed.
ISO/IEC | 9075-4: 1996(E) Database Language SQL - Part 4: Persistent Stored Modules (SQL/PSM).
Tsichritzis, | D. T., & Lochovsky, F. H. (1977). Database Management Systems. Academic Press.

UNIX

Kernighan, | B. W., & Ritchie, D. M. (1978). The C Programming Language. Prentice-Hall, Inc., Englewood Cliffs, New Jersey 07632.
Kernighan, | B. W. & Ritchie, D. M. (1978). "UNIX Programming Second Edition." The UNIX Programmer's Manual, Vol.2, B. W. Kernighan & M. D. McIlroy (editors), Bell Telephone Laboratories, Inc., Murray Hill, New Jersey.

Windows NT

VC++ 5.0 On-Line Help from Microsoft Corporation.