こんにちは、植田です。
前回は外部システムのDBMSと簡単に連携出来ることが確認できました。
前回記事:検証#機能紹介:DBRET(DBリバースエンジニアリングツール)
今回の記事では引き続きDBRETについて機能検証を行っていきたいと思います。
主な観点として下記の観点から実行時の挙動について検証をしていきます。
- 実行時に外部テーブル同士の結合はどのようになるのか?
- 外部テーブルと内部テーブルを名寄せした時にどのような結合になるのか
それでは試していきましょう。
1.実行時に外部テーブル同士の結合はどのようになるのか?
外部テーブルを複数リバースした場合に、GeneXusの項目属性(Attribute)の命名ルールと同じでように
異なるテーブルの同じ意味を持つ項目同士を名寄せすることで親子関係を保持することが可能となります。
今回は解りやすくするために外部DBとしてのシステムもGeneXusで作成しています。
共通マスタデータとしてAREA(地域)、CTRY(国)を作成しています。国は1つの地域を持つ形として
親子関係を持っています。
【AREA(地域)トランザクション】
【CTRY(国)トランザクション】
今回はこちらの2つのトランザクションから生成されたテーブルをDBRETを使用して取り込みます。
DBRETの設定タブには今回は以下の様に設定しました。
名称変更ルール:Same name – Same thing
こちらの設定をすることで自動で名寄せを行います。
(通常はM_AREAAreaなど、項目名が重複しないように自動的にPrefixが付きます)
取込完了後、DBリバースで自動生成されたCTRYトランザクションを参照すると以下の様にAREAトランザクションと親子関係として認識されていることが確認できます。
この状態で簡単なテスト画面を作成して国と地域の情報を取得し、結果としてどのようなSQLが生成されているかを確認してみたいと思います。
発行されたSQLを確認するために、今回はGeneXus標準添付のlog4netを使用しました。
結果がこちらです。
GeneXus.Data.GxConnectionCache - GetPreparedCommand stmt:SELECT T1.[CtryNm], T2.[AreaNm], T1.[Area], T1.[Ctry] FROM (dbo.[M_CTRY] T1 INNER JOIN dbo.[M_AREA] T2 ON T2.[Area] = T1.[Area]) ORDER BY T1.[Ctry], T1.[Area]
国と地域が内部結合状態で取得されていることがわかりました。
まとめ
GeneXusで外部DBから複数のテーブル定義を取り込んだ際に、外部DB上で親子関係を持つテーブルに関する情報を取得する際は内部結合としてSQLが生成されていることがわかりました。
次回は「 外部テーブルと内部テーブルを名寄せした時にどのような結合になるのか 」について検証を進めていきたいと思います。
最後までご視聴頂きありがとうございました!