DBMS 参照整合性の宣言をコントロールします。
No | GeneXus は、データベースの参照整合性を宣言したり、作成/再編成のプロセス中に定義されたものを排除したりしません。 | Remove | GeneXus は、作成/再編成のプロセス中に、再編成するテーブルに関連するすべての参照整合性を削除します。 | Yes | GeneXus は、作成/再構成のプロセス中に、データベースのすべての参照整合性を宣言します (GeneXus X バージョン以降の既定値です)。 |
このデータベースプロパティは、モデルのデータストアオプションの [ Creation/Reorganization information ] プロパティグループ内で定義する必要があります。このプロパティを使用すると、参照整合性が適用されるデータベースが作成されたときに、DBMS に登録できます。再編成中、参照整合性の宣言は段階的に行われます。これは、再編成によって変更されるテーブルにのみ参照整合性の設定が考慮されることを意味します。DBMS で定義された参照整合性に再編成が違反する場合は、エラーメッセージが表示されます。
- このオプションを [ No ] に設定した場合、GeneXus は DBMS の参照整合性を生成しません。ただし、このオプションは、GeneXus で生成されたプログラムによって実行される参照整合性コントロールには影響しません。
- このオプションを [ Yes ] に設定すると、影響分析レポートで指定したテーブル以外にも、いくつかのテーブルが再編成プロセスでブロックされることがあります。テーブルを再編成するときに、そのテーブルを「親」 (上位) テーブルとして使用する参照整合性は一時的に解除する必要があります。既存のデータベースでこのオプションを [ Yes ] に設定すると、宣言した参照整合性が検証されず、エラーが発生する可能性があります。この場合、DBMS は、再編成プロセス中に一致しない点を検出してエラーコードを返します。
- このオプションの設定を変更すると、テーブルが再編成され、段階的にデータベースに反映されます。
- ローカルテーブルとリモートテーブルの間の参照整合性を定義することはできません。
- このオプションが [ Yes ] に設定されている場合、 [ Primary key definition ] プロパティに設定できる値は次のとおりです: Primary key および Constraint。インデックスは使用できません。
- 既存の参照整合性を解除したい場合は [ Remove ] を使用します。データベースを再度作成し、参照整合性を [ No ] に変更する必要があります。
- ローカルテーブルのクライアント/サーバーモデルでは、参照整合性は定義されません。そのため、サーバーテーブルの整合性に違反するアクションをローカルテーブル上で実行することができ、その逆も可能です。
- [ Generate null for nullvalue() ] プロパティが [ No ] の場合 (生成される値は GeneXus の Nul であり、DBMS の Null ではない)、外部キーの Allownulls ルールによってエラーが生成されます。これは、GeneXus の null 値を何らかのテーブルのキーとして検索するため、DBMS の参照整合性に違反するからです。 [ Generate null for nullvalue() ] プロパティが [ Yes ] の場合、エラーは発生しません。
- クライアント/サーバーモデルでは、Error_handler ルールを使用してエラーに対処することで、プログラムの終了を回避できます。
- エラーに対処しなかった場合、参照整合性違反によってプログラムがキャンセルされます。
参照整合性を持つ、次の構造のアプリケーションがあると仮定します。
Category
CategoryId*
CategoryName
Client
CliIentd*
ClientName
ClientTelephone
CategoryId
CategoryName
データを使用して、両方のテーブルについて考えてみましょう。
削除と呼ばれるプロセスもあります。テーブルカテゴリのすべてのレコードを削除します。
For each Defined by CategoryName
Delete
Endfor
このプロセスは、別のテーブルにあり、外部キーであるレコードを削除しようとします。そのため、参照整合性に違反します。DBMS によって、または Access を使用している場合は、エラーが発生します。たとえば、SQL Server の場合は次のダイアログが表示されます:
Error code 547 : Delete statement conflicted with COLUMN REFERENCE constraint …
この場合、プログラムがキャンセルされます。
ここでは、Error_handler ルールを使用してエラーに対処すると、プログラムの終了を回避できます。
次のステップを実行する必要があります:
エラーに対処するため、プロシージャーにサブルーチンを定義します:
Sub 'Error_handler'
If &gxDBErr= 547 //SQL Server error code
Msg('参照整合性違反のため、このプロシージャーを実行できません。')
Rollback
EndIf
EndSub // 'Error-handler'
また、次のルールを定義します: Error_handler(‘Message’).
データストアで利用できます。 データストア: Iseries、DB2 UDB、INFORMIX、MYSQL、ORACLE、POSTGRESQL、SQLSERVER 対応しているプラットフォーム: Web (.NET、Java)
Error_Handler ルール
[ Generate null for nullvalue() ] プロパティ
|