GeneXus が生成する Transaction オブジェクトでは、参照整合性のコントロールが行われます。
次のトランザクションを定義するとします。
Country
{
CountryId*
CountryName
}
Customer
{
CustomerId*
CustomerName
CountryId
CountryName
}
結果として、アプリケーションに関連付けられたデータベースに次のテーブルが作成されます。 COUNTRY (CountryId, CountryName)
主キー: CountryId
CUSTOMER (CustomerId, CustomerName, CustomerAddress, CustomerGender, CountryId)
主キー: CustomerId
外部キー: CountryId (COUNTRY)
CUSTOMER テーブルの CountryId 項目属性は、COUNTRY テーブルに関連する外部キーであることから、2 つのテーブル間の関係が確立されます。
下図でこの関係を確認できます。
一重矢印は、矢印が指すテーブルに、もう一方のテーブルのインスタンスごとに 1 つのインスタンスが存在することを意味します (つまり、各顧客は 1 か国のみに属します)。
二重矢印は、矢印が指すテーブルに、もう一方のテーブルのインスタンスごとに複数のインスタンスが存在することを意味します (つまり、各国には複数の顧客が存在します)。
COUNTRY テーブルと CUSTOMER テーブルの関係は、1 対 N (1 対多) の関係と呼ばれます。 逆に、CUSTOMER と COUNTRY の関係は N 対 1 (多対 1) です。
GeneXus の用語では、2 つのテーブルには従属関係があると言います。具体的には次のように表現します。
- COUNTRY は CUSTOMER の上位である
- CUSTOMER は COUNTRY の下位である
これは次のことを意味します。
- 下位テーブル (CUSTOMER) のレコードを作成または変更する場合、上位テーブル (COUNTRY) に関連レコードが存在している必要があります。
- 上位テーブル (COUNTRY) からレコードを削除する場合、下位テーブル (CUSTOMER) に関連レコードが存在していてはいけません。
言い換えると、次のとおりです。
- CUSTOMER テーブルのレコードを挿入または変更する場合、外部キー項目属性 (CountryId) に入力された値が主キー値として COUNTRY テーブルのレコードに存在している必要があります。
- COUNTRY テーブルからレコードを削除する場合、削除対象のレコードの主キー値と同じ外部キー値 (CountryId) を持つレコードが CUSTOMER テーブルに存在していてはいけません。
|