はじめに
Cachéは、リレーショナルデータベースシステムではありませんが、Caché SQLを使用することにより、一般的なリレーショナルデータベースシステムと同じようにSQL文でデータベースにアクセスが可能です。さらにリレーショナルデータベースシステムにアクセスするための標準規格であるODBC、JDBCをサポートしていますので、これらの規格に則ったさまざまな製品、フレームワーク、ミドルウェア、開発環境との連携が可能です。
Caché SQLの機能概要
統一データアーキテクチャ
「Caché SQL」は、Cachéのコアアーキテクチャである統一データアーキテクチャの1つのコンポーネントとして提供される機能です。Cachéのメタデータ定義(スキーマ)は、クラス定義と呼ばれますが、これは、オブジェクト指向の考え方に則った形で、オブジェクトの雛形を定義するもので、一般的なオブジェクト指向言語でクラスを定義することとほぼ同等です。それらとの大きな違いは、Cachéのクラスでは、そのクラス定義の属性として永続性を持たせることができる点で、これがCachéがデータベースとなりえる所以となります。
1つのクラス定義は、他クラスへの参照、リレーションシップ、コレクションなどの関連を持つことができ、結果として、複雑なオブジェクトツリー構造を表現できます。これらの構造は、最終的には、下位の多次元データエンジンを通して、多次元配列データとして、Cachéデータベースに格納、参照されます。
そして、その構造の各層をスライスすることにより、複数の2次元のテーブルとして表現可能になります。
従って、1つのクラス定義(およびそれに関連するクラス定義)から構造の複雑さに応じて、複数(1-n)のテーブル定義が生成されて、各テーブル定義に対してSQLでのアクセスが可能になります(統一データアーキテクチャについては、連載第1回で解説)。
クラス定義の方法
クラス定義は、Cachéクラス定義言語に基づいて定義する方法と、SQL標準で定義されているDDL言語を使って定義する2種類の方法が用意されています。
いずれの方法を使っても、統一データアーキテクチャを通して、クラス定義とテーブル定義の2つが自動生成されるようになっています。またDDL言語は、各ベンダー固有のシンタックスもサポートしており、例えばOracleで定義されたDDL文をCachéにインポートして、クラス定義、テーブル定義を生成することも可能です。
SQLアクセス方法
SQLを使ってCachéのデータベースにアクセスする方法には、以下の方法があります。
- 管理ポータルのデータ管理SQLから直接SQL文を実行する
- Caché ObjectScriptのプログラムの中に埋め込みSQL文として記述し、実行する
- Caché ObjectScriptまたは、Caché Basicのプログラムの中で、
ResultSet
オブジェクトを生成し、そのコマンドとして動的SQL文を実行 - ODBCに対応したツールからSQL文を発行する
- Javaのプログラムの中で、JDBCを使用してSQL文を発行する
その他
インデックス
Cachéでも、他のリレーショナルデータベースシステムと同様にクエリのスピードを向上するためにインデックスを利用できます。 インデックスの種類として、一般的なインデックスのほかに複雑な検索条件の実行の高速化に寄与するビットマップインデックス、集計の高速化を実現できるビットスライスインデックスが用意されています。
全文検索機能
文字列の検索に関して、一般的な完全一致や前方一致だけでなく、中間一致も高速に検索可能な全文検索機能も用意されています。
トリガー
一般的なリレーショナルデータベースシステムと同様にトリガーを定義することができます。
ストアドプロシジャ
連続するSQL文を実行したり、複雑な処理をひとまとめにしてストアドプロシジャとして登録し、ODBC、JDBC等から実行し、結果を返すことが可能です。
ビュー
一般的なリレーショナルデータベースシステムと同様にビューを定義することができます。
セキュリティ
ユーザー単位、またはその上位概念であるロール単位にテーブルアクセスの制御が可能です。
また、行単位セキュリティという機能があり、行単位にセキュリティ設定が可能です。
ストリームデータ(バイナリデータ、長い文字列データ)対応
いわゆるBLOBやCLOBと呼ばれるデータをSQLからアクセスすることが可能です。
拡張機能
Caché SQLには、一般的なリレーショナルデータベースにはないユニークな機能拡張があります。
暗黙JOIN
明示的にJOINを指定して複雑なSQL文を記述する代わりに、特別な->
演算子を使って関連テーブルからの値を取得する簡便な方法を提供します。
前方一致演算子
文字列の前方一致検索を行う拡張演算子%STARTSWITH
が用意されています。この演算子を使用すると、インデックスを利用した高速検索を行うことができます。
ユーザー定義関数
Cachéのクラスメソッド(静的メソッド)をSQL文からユーザー定義関数として実行することができます。