問題[7] スポーツジム用GeneXusアプリケーションには、ルームを登録するための GymRoom トランザクションと、クラスを登録するためのClassトランザクションがあります。
GymRoom トランザクションを使って、主キー{GymRoomId}が「4」のレコードを削除しようとした場合、どのようなことが起きるか選択して下さい。
- 7.1 GeneXusによる制御は一切なく、主キー{GymRoomId}が「4」のレコードは GYMROOM テーブルから削除される。
- 7.2 まずGeneXusによって、外部キー{GymRoomId}が「4」のレコードがCLASS テーブルからすべて削除され、次にGYMROOMテーブルからレコードが削除される。
- 7.3 GYMROOMテーブルから、主キー{GymRoomId}が「4」の主キーレコードを削除する前に、GeneXusによって、外部キー{GymRoomId}にそのような値を持つレコードがCLASSテーブルにないかがチェックされる。 外部キー{GymRoomId}が「4」の値を持つレコードが見つかった場合、関係するレコードが存在するため GYMROOM テーブルからレコードを削除することができないという内容のメッセージが表示される。
解答は??
【解説】
この問題は参照整合性(Referential Integrity)に関する問題です。
GeneXusのトランザクションオブジェクトはデータモデルのリレーションを元に参照整合性を維持するための機能が自動で組み込まれます。
問題のデータモデルをテーブルに展開すると以下の様になります。
問題のデータモデルをテーブルに展開すると以下の様になります。
「主キー{GymRoomId}が4のレコードを削除」とありますので、GymRoomトランザクションはGymRoomテーブルのレコードを削除しようとします。
この時、「主キー{GymRoomId}」を外部キーとして保持している「Classテーブル」に対して{CymRoomId}=4のレコードが存在しないか、参照整合性のチェックを行います。
もし、Classテーブルに該当するレコードが存在する場合は参照整合性エラーとなり、GymRoomテーブルのレコードは削除できません。
この時、「主キー{GymRoomId}」を外部キーとして保持している「Classテーブル」に対して{CymRoomId}=4のレコードが存在しないか、参照整合性のチェックを行います。
もし、Classテーブルに該当するレコードが存在する場合は参照整合性エラーとなり、GymRoomテーブルのレコードは削除できません。
補足ですが、一つ前の問題6にて「GeneXusが自動的に設定するインデックスは主キーと外部キーである」とありましたが、参照整合性維持のチェック用に外部キーによる検索を行う為、外部キーにインデックスを作成することをGeneXusが自動的に行う範疇となっています。
0 件のコメント:
コメントを投稿