コラム・特集

3.4 システム R

IEハンドブック
第12部 コンピュータと情報処理システム

第3章 データベース管理

3.4 システム R

関係型データ・モデル
関係型データ・モデルは,1970年にCoddによって提案された。システムRを考察する前に,関係型データ・モデ ルの基礎を紹介する。関係型データベースは「関係(リレーション)」呼ばれる2次元表からなっている。関係はn列あり,これは関係のスキーマを構成するn個のアトリビュート(すなわちフィールド )のそれぞれに対するものである表の行は「組(タプル )」と呼ばれ,アトリビュートそれぞれに対して1つのデータ値からなる。したがって,組はレコード・オカレンスの概念と同じあり,アトリビュートの関係の集まりはレコード・タイプに対応する。したがって,関係型データベースの論理構造は,結合されないレコード・タイプの集まりであるとうまい具合に表現される。2つのレコード・タイプ間の論理的関係は,両方のレコード・タイプのアトリビュートを反復することによって表現される。このことを後でシステムRの例で示す (図表12.3.8)各レコード・タイプの1つ以上のアトリビュートがキーであることを宣言しなければならない。関係内の各組が,関係内の組を一意に識別するようなキー値をもつようにキーは選択されねばならない。

Coddは,表に編成されたデータを操作するために2つの言語,すなわち関係代数 (relational algebra)と関係計算 (relational calculus)を提案した。一般に,関係代数コマンドはオペランドとして1つ以上の表をとり派生表 (derivative table,すなわち,ファイル)をつくる。関係代数において (とりわけ)基本的な2つのコマンドは,射影と結合である「射影 (projection)」は, より小さな表を与えるために,指定された列を表からとり除く (すべての重複した組はこの新しい表から除去される)。「結合(join)」は,共通の定義域 (すなわち反復したアトリビュート)をもつ2つの表の上で実行されうる。これは,マッチング・オペレーションであり,指定されたアトリビュート値の一致に基づき,その組が2つの元の表の連結であるような新しい関係を生み出す関係計算は,既存の諸関係から導き出される関係を定義するのに用いられる数学志向の概念である。プロセッサ (すなわち,関係型データベース・システムのソフトウエア要素)は関係計算表現を受け取ると,必要な表を導くのに必要な一連の関係代数コマンドを自動的に決定する。プロセッサは,すべての計算コマンドに対応する代数的なステップを生成する能力をもつていなければならない。次節で議論するSEQUELという言語は,数学表記が大幅に除去された関係計算のシステムR版である。

システムRの概観
システムRは,関係型データ ベース観をサポートし、ユーザーにデータ 操作のための計算志向言語(SEQUEL)を提供するデータベース管理システムである。システムRは まだ商業的には発売されていないので,この記 述は,発売前の様々な仕様に基づいている。システムは2つの基本的要素,すなわち,関係型データ・システム (relational data system : RDS)と関係型記憶システム(relational storage system :RSS)を 含んでいる RDSは SEQUELのステートメントをコンパイルし,機械語アクセス・モジュールからの呼び出しによってある要求の答をいかにして生成するかを決定する。また,外部の名前 (アトリビュートの同義語)のカタログを維持し, 機密保護する。RSSは,簡単で一時記憶 (record-at-a-time)なオペレーションを行うためのソフトウェアからなる。また,デ ータの回復,トランザクション管理,データ定義の手段を提供する。これは実行時間中に,RDS によって生成されたアクセス・モジュールによって呼び出される。 検索を容易にするために,逐次的探索とともに「インデックスとリンク」と呼ばれるアクセス経路を利用する。これにより,他の関係にある組に対応する (すなわち,マッチング・アトリビュート値をもつ)ある関係にある組が,多重ファイルのすべての探索をしないで素早くアクセスするのを可能にする。システムの構造を図表12.3.7に示す。

関係型モデルは,表という世界観に基づいており,ユー ザーが明示的に指定したり利用したりするレコード間リンケージを許していないので,データ検索のオペレーションは非常に不経済なものでありうる。システムRは,RDSのCONNECTコマンドによってリンケージを指定することをユーザーに認めている。CONNECTコマンドは,データベース・作業グループ(DBTG)仕様のセットタイプの概念に似ている。しかしユーザーは,アプリケーション・プログラムにおいてはこのようなリンケージを明示的に利用することはまだできない。SEQUELのユーザーは,反復したアトリピュートによって相互関係を指定する RDSはコンパイルの間,効率のために関係間リンケージを利用することができる。

システムRを例示するために,部品メーカー部品の例について3つの表を用いる。これらの表のスキーマを図表12.3.3に示す。表の間の関係を示すためにアトリビュ ートを意図的に反復していることに注意されたい反復の他にも,表の間で定義されたリンケージもあるであろう。

NNECT(リンク)するようシステムRに指示することができる。このリンケージは,検索ステートメントを作る際に明示的に用いられるわけではない。各部品メーカ ーの部品を検索したいユーザーは,PARTのSNAMEフィーフレドがSUPPLIER SNAMEフィールドと一致しなければならないと述べることによって要求する。

データ操作システムRデータベースのデータ操作は,SEQUELによってなされるが,これは単独の言語としても,また, PL/1や COBOLのプログラムに組み込まれても用いる。ことができる。

SEQUELフェッチ・ステートメントの基本構造には, SELECT,FROM,WHEREの項が含まれる。WHEREの項は算術比較・演算,ブール演算(AND,OR,NOT),集合算〔UN10N(和集合),INTERS ECT(積集合),MINUS(差集合)〕,集合の包含関係 (Sに属するX,SはXを含む,Sに属さないX,SはXを含まない。

ここでSは,表の例であり,Xは,表の列かアトリビュート値である),ないし(1組の質問を表わす)他のSELECT―FROM―WHEREの項の範囲内でアトリビュートを利用する。SEQUELの主な特徴をいくつかの例によって示す。その際,図表12.3.9および図表12.3.10の2つの表を用いる。

1.部品101を 供給する部品メーカーを印刷するには 以下を用いる。

SELECT SNAME
FROM  PART
WHERE PARTNO=“101″
〔ORDER BY NAME〕
「ORDER BY NAME」はオプションで,出力
された部品メーカー名を記憶する必用のある時に用いる。

2.少 なくとも1つ 白い部分を供給する部品メーカー の印刷

SELFCT〔 UNIQUE〕 SNAME
FROM          PART
WHERE PARTNO IN
SELECT     PARTNO
FROM      PARTDS
WHERE COLOR=”WHITE”

あるいは
SELECT UNIQUE SNAME
FROM PAR、  PARTDS
WHERE PART PARTNO=PARTDS.
PARTNO AND COLOR=”WHITE”
「UNIQUE」は,重複した部品メーカー名を削除するのに用いられる。

3.すべての白い部分を供給する部品メーカーの印刷。

SELECT   SNAME
FROM    PARTT
WHERE (SELECT PARTNO
FROM PART
WHERE SNAME=T.SNAME)
CONTAINS
(SELECT PARTNO
FROM PARTDS
WHERE COLOR=”WHITE”)
SNAMEのPARTから選択された組は,仮の名前「T」をつけられる。この仮の名前はWHEREの項でのこの組を参照するのに用いられる。

4.COLOR(色 )男1に 分類された部品の印刷。

SELECT PNAME,COLOR
FROM PARTDS
GROUP BY COLOR.

5.PART関係に新しい部品メーカーを挿入し,その後,部品メーカー「SA」 についてPARTのすべての組を削除する。

INSERT INTO PART(SNAME,PARTNO)
<SD,#104>;
DELETE PART WHERE SNAME=“ SA”;

6.PARTDSの部品101の重量を更新。

UPDATE PARTDS
SET WEIGHT=50
WHERE PART=“ 101″

7.PL/1やCOBOLプログラムでは,SEQUELステートメントは,ドル記号を先頭につけなければならない。「アクティブ・セット」と呼ばれる一時的な表は,LETコマンドで定義する。一時的な表の組は,「カーソル」に基づき1度に1回 (逐次的に) アクセスされる。カーソルは,一時的な表の1組に位置を維持するのに用いられる。すなわち,どの組のトラックが現在プログラムによって利用されているかを維持する(カーソルの概念に対応するカレンシー・インディケータは,ユーザーが定義した一時的な表に対してよりもデータベースに対して維持されるということに注意されたい。次節のMDBSを参照のこと)。

一時的な表に対する組の生成はOPENステートメ ントによって行われる。結果生じる表はLETコマンドの指定に従う。FETCHコマンドは,現在の組 (すなわちカーソルによって指示されたような) を,LETコマンドで指定されたようにプログラム の変数に転送する。そしてカーソルは,一時的な表の次の組に「移動する」。この組が次にフェッチすることができる。次の例は,ホスト言語内でSEQUELがどのように用いられるかを示している。

$LET S BE
SELECT SNAME
INTO SX
FROM SUPPLIER
WHERE PARTNO=$Y

S OPEN S;
S FETCH S;
S CLOSE S;
Xや Yという文字はPL/1や COBOLのホスト言語プログラムで定義された変数である。これらは, ホスト言語の変数であることを表わし,また前処理を書く のを容易にするためにドル記号がつけられている。このコードが(Yの値で指示されたように) ある特定の部品番号を供給する部品メーカーについてその部品メーカー名の表を生成する。次に第1番目の部品メーカー名がXにフェッチされる。LETコマンドは,一時的な表Sがいかにして作られるべきかを(すなわちマンドは , (現在の組に対する)SNAMD値を変数Xに結びつける。

 本コラムは絶版となっている「IEハンドブック(サルベンティ編・日本能率協会訳・1986)」をアーカイブとして掲載するものです。このハンドブックの各章は多くの事例と理論を通して生産性向上に対するアイデアを提供するべく専門家によって執筆されています。基盤をなしているIEの考え方・原則はインダストリアル・エンジニアリングにかかわるすべてのひとに有用でしょう。

関連記事一覧

2019ものづくり公開セミナーガイド

B2Bデジタルマーケティングセミナー

ものづくり人材育成ソリューション

マーケティング分野オンラインセミナー