2013年7月22日月曜日

ベーステーブルと拡張テーブルって何?

今回の話はGeneXusを扱うに当たって、一番基本となる考え方です。逆に言うと「ベーステーブルと拡張テーブルって何?」という質問に答えられない人はGeneXusを使っていても理解しているとは言えません。

GeneXusにおいては開発者はアクセスするテーブルを直接指定する事はありません(できません)。指定するのは項目属性名のみで、その項目属性が「どのテーブルに属していて?」「どのテーブルとをJOINする必要があるのか?」はGeneXusが推論します。その推論の基礎となっているのがベーステーブルと拡張テーブルという考え方です。

ベーステーブルとは

GeneXusがデータベースにアクセスする時に(実際には生成するSQL文としての)起点となるテーブルの事を指します。

拡張テーブルとは

ベーステーブルを起点とした時にアクセス可能な範囲(実際には生成するSQL文としてJOIN可能な範囲のテーブル)を言います。
又、拡張テーブルにはベーステーブルも含まれます。

拡張テーブルかどうかの判断基準はベーステーブルから見て「n→1の関係(リレーション)」のテーブルです。逆にベーステーブルから見て「1→nの関係」は拡張テーブルではありません。


例えば、以下のデータモデルを前提とした時に





Case1 : Customerテーブルをベーステーブルとした時の拡張テーブルは、
Customer → Country



Case2 : Invoiceテーブルをベーステーブルとした時の拡張テーブルは、
Invoice → Customer → Country



Case3 : InvoiceDetailテーブルをベーステーブルとした時の拡張テーブルは、
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 件のコメント:

コメントを投稿