最近のアクセス:
並行トランザクション

並行トランザクションとは、同じ ID (主キー) を持つ、複数の Transaction オブジェクトを指す名称です。
たとえば、次の 2 つのトランザクションがあるとします:
Supplier Client
{ {
   CompanyId*    CompanyId*
   CompanyName    CompanyName
   CompanyAddress    CompanyAddress
   CompanyPhone    CompanyPhone
   SupplierPurchasesAmount    ClientDiscount
} }
 
この 2 つのトランザクションは、次の ID を共有しているため、並行トランザクションです: CompanyId
これはどのような影響を及ぼすのでしょうか?
GeneXus のデータベースは標準化の基準に基づいて設計されます。そのため、この場合、両方のトランザクションの項目属性がマージされた物理テーブルがデータベースに 1 つだけ作成されます:
CompanyId* CompanyName CompanyAddress CompanyPhone SupplierPurchasesAmount ClientDiscount
 
その後、2 つの異なるプログラムが生成されます。それぞれフォーム、ルール、イベント、プロパティなどが独自に定められますが、データの格納先として同じ物理テーブルが関連付けられます。
したがって、Supplier トランザクションを実行して、CompanyId=1 の新しい企業を入力すると、主キー値が 1 であるレコードが COMPANY テーブルに挿入され、その CompanyName、CompanyAddress、CompanyPhone、SupplierPurchasesAmount の各項目属性の値は、ユーザーが入力した値となります。このレコードの ClientDiscount 項目属性はどうなるのかというと、Supplier トランザクションに存在せず、エンドユーザーが値を入力できないため、空になります。
その後、新しい企業 CompanyId=2 を入力するために Client トランザクションを実行すると、主キー値が 2 であるレコードが COMPANY テーブルに挿入されます。CompanyName、CompanyAddress、CompanyPhone、ClientDiscount はユーザーが入力した値になります。この場合、SupplierPurchasesAmount 項目属性は空の値で保存されます。
エンドユーザーは、いずれかのトランザクションを実行することで、両方のトランザクションに関連付けられている物理テーブル COMPANY 内のレコードのクエリ、更新、削除を実行できます。各トランザクションは独立したオブジェクトであるため、並行トランザクションの各トランザクションに別々のルールやイベントを定義し、必要なコントロールや動作を定義することが可能です。
トランザクションの並行は、複数のレベルで成立する場合があります。ここでは、1 レベルのトランザクションについて説明してきました。
たとえば、次の構造で 3 つのトランザクションにすることも可能です。
トランザクション "T1" トランザクション "T2" トランザクション "T3"
A* A* A*
B C E
C D { M*
{ X* { X*   N }
  Z }   Y }  
 
この場合、3 つのトランザクションの最初のレベル間 (すべて同じ物理テーブルが関連付けられている) と、最初の 2 つのトランザクションの第 2 レベル間 (同じ物理テーブルを共有) で、並行がダブルで成り立ちます。GeneXus では、次の 3 つの物理テーブルがデータベースに作成されます:
T1 A* B C D E
 
T2 A* X* Z Y
 
T3 A* M* N
 




サブページ
Created: 14/09/18 03:13 by Admin Last update: 21/05/21 03:29 by Admin
カテゴリ
Powered by GXwiki 3.0