top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
SQL定義書、モジュール構成、内部構造などを考察中です。
第2世代 blancoDbの設計をしはじめています。ようやっと最近 考えがまとまってきました。モジュール構成や内部構造について、R/Oマッピングを実プロジェクトに投入したうえでのさまざまなノウハウをもとに、効果的なモジュール分割や内部構造を再設計できることを期待しています。
DSL実装のひとつとして blancoDbを見た場合、対象とするものはリレーショナルデータベースやSQLです。このため、プログラミング言語非依存化し、登場する用語もリレーショナルデータベース関連用語だけにするのが望ましいと考えています。定義書をプログラミング言語非依存にすることにより、SQL定義書記入者に求められるスキルをより限定することができ、導入コスト削減が期待できます。
具体的には、下記のような改良が考えられます。
SQL入出力パラメータの型指定について、データベースの論理型を指定。ただし、ドロップダウンについて従来の型表現も残しておいて互換性確保は実施したい。
SQL入出力パラメータに 非NULLを指定する列を追加。
第2世代 blancoDb のモジュール構成は 下記のような分割が妥当かと考えています。
データベースから表情報を抽出する。
blancoDbMetaData が担当
プログラミング言語に非依存
データベースの表情報をもとに、単一表アクセス用SQLを作成する。
blancoDbSimpleTable (?) (名称は未決定)
プログラミング言語に ほぼ 非依存。ただし、プログラミング言語によって SQLの作成・非作成などを切りかえる能力は必要。
SQL定義書(*.xls形式) を読み込んで XMLファイルに変換する。
blancoDb本体、あるいは これも別モジュールにすべきかどうか検討。blancoDbForm (?) (名称は未決定)
プログラミング言語に ほぼ 非依存 非依存になるかどうかは様式の内容次第。依存度によって別モジュール化するかどうかの最終的な判断がなされる。
SQL文をデータベースに対して試し打ちをし、SQL文に関するメタ情報を取得する。
blancoDbMetaData が担当
プログラミング言語に ほぼ 非依存
SQL文に対するメタ情報をもとに、ソースコードを自動生成する。
blancoDb本体。あるいは、Java版 blancoDbとでも呼ばれる
プログラミング言語に依存
このうち、blancoDbMetaData については既に実装は終わっています。blancoDbMetaData は、全く最初から書きおろしました。一から書き下ろしたことにより、とても多くのことを学ぶことができました。ちなみに、blancoDbMetaDataを利用すると表定義エクスポートツールのようなものが、ごく簡単に作成できます。
現在 プログラミング言語型で駆動している内部構造を、java.sql.Types ベースへと変更。
マッピングについて、クラス一箇所に集合させて 可読性を向上させる。あるいはそもそも マッピングを blancoStringConverter定義化して外部化する。 → java.sql.Types と プログラミング言語型 とのマッピングを blancoStringConverterベースに移行。