GeneXusにおいては開発者はアクセスするテーブルを直接指定する事はありません(できません)。指定するのは項目属性名のみで、その項目属性が「どのテーブルに属していて?」「どのテーブルとをJOINする必要があるのか?」はGeneXusが推論します。その推論の基礎となっているのがベーステーブルと拡張テーブルという考え方です。
ベーステーブルとは
GeneXusがデータベースにアクセスする時に(実際には生成するSQL文としての)起点となるテーブルの事を指します。拡張テーブルとは
ベーステーブルを起点とした時にアクセス可能な範囲(実際には生成するSQL文としてJOIN可能な範囲のテーブル)を言います。又、拡張テーブルにはベーステーブルも含まれます。
拡張テーブルかどうかの判断基準はベーステーブルから見て「n→1の関係(リレーション)」のテーブルです。逆にベーステーブルから見て「1→nの関係」は拡張テーブルではありません。
例えば、以下のデータモデルを前提とした時に
Case1 : Customerテーブルをベーステーブルとした時の拡張テーブルは、
Customer → Country
Invoice → Customer → Country
InvoiceDetail → Customer → Countryと
InvoiceDetail → Product
となります。
n側のレコードを1件特定した時に1側のレコードも1件特定でき取り出せる。つまり仮想的に1テーブルになる範囲というのが拡張テーブルです。言い換えると、JOINして1件取り出す事ができる範囲という事です。
繰り返しになりますが例えば、
・Invoiceテーブルで1レコード特定すると(伝票番号=1のレコードを特定すると)
・Customerテーブルでも1件レコードを特定でき(顧客番号=1:横井のレコードを特定でき)
・Countryテーブルでも1件レコードを特定できる(国番号=1:日本のレコードを特定できる)
となります。
逆に、1→nの関係に関しては、1の側を1件特定しても、nの側はn件取り出せてしまうのでこれは拡張テーブルとは言いません。(JOINした結果がn件取得する可能性がある)
判りましたか? 聞き慣れない理論なのでピンとこない人もいるかもしれません。いずれにせよ、目的としては「GeneXusが指定された項目属性をインプットとして、SQL文を生成するのに必要なテーブル及びリレーションを推論するための理論」となります。
0 件のコメント:
コメントを投稿