たとえば、ある商品の仕入の可能性のあるお店全部を表示したいとする。
(仕入先はコードではなく、仕入先の名前で)
このお店の仕入先と商品は、ある程度限られているとしたとき、
どうするか・・・なんだけど・・
まあ、単純に考えると、このテーブルは、
商品テーブル、仕入先テーブル、商品仕入先テーブルとなっていて、
この条件を満たすには、
商品テーブルと仕入先テーブル、商品仕入先テーブルを内部結合して、
そのとき、商品テーブルの商品コードが指定番号のものの、
仕入先テーブル.仕入先名
を表示することになる。
しかし、ここで結合が2テーブルではいる上、このような方法だと、
サーバー側は、クライアントで見たいモノのサービスを全て提供しない
といけないことになる。
これじゃあ、AJAXをやる意味が無い。
クライアント側で、簡単にマッシュアップできないか?
と考えると、そもそも、仕入先テーブルは、他でも読む必要があるはずである。
立ち上げ時に読んでしまってもいいかもしれない。
商品テーブルも、たいてい、商品の仕入先をみる前にどっかで読んでいるものである。
とすると、仕入先テーブルを読んだときに、
sire[仕入先コード][仕入先名] で、仕入先を受け取れるように、
読み込ンだデータを保存しておいて
(あるいは、そーいう.jsファイルを作って、そいつをインクルードする。仕入先が
編集されるたび、.jsファイルも書き換える)
さらに、その前に、商品マスタも読んでおけば、
ここでやらなきゃいけないことは、商品仕入先テーブルを、指定された商品コード
(商品名=>商品コードは、商品マスタを読み込んでいるのでわかる)で読んで
くればいいだけ。
そうすれば、その仕入先コードを受け取って、上記のsire[仕入先コード][仕入先名]
から、仕入先名が分かる。
なお、もし、読み込み時の時間の関係で、データ矛盾(あるはずのデータが無く結合できない)が起きた場合は、ユーザーはリドローすれば、最新のでーたになる。
このように、先読みしておけば、(更新の場合は排他が必要なので、いっぺんにやらないと無理だけど)各テーブルの検索APIを提供するだけですむ。
問題は、どのように先読みさせるか(読み込みを散らすか)だけど、それは、画面上の設計に関わる(画面で、順番に読み込でいくようにする)
その場合、テーブルはエンティティに関係が深いので、テーブルを順番に読むような画面設計にするということは、エンティティ=>オブジェクトベースでの画面設計ということになる(つまり、1業務1画面ではなく、1エンティティ1画面のようなかんじで設計し、ボタンなどのイベントが1業務になる)
ゲームだと、先読みして画面を作るというのは、あたりまえだけど(ダブルバッファリングとか)AJAXでも、そうなるかもしれない。。。