Skip to main content

 

データを使用する

 

OutSystems

削除規則

モジュールの複数エンティティ間の関係を作成する場合、レコードを削除する際にどのような参照整合性を使用するのかを定義できます。参照整合性は、エンティティAレコードが削除されたときそのエンティティAを参照しているエンティティBがどうなるかを指定するものです。

使用する参照整合性規則を指定するために、参照アトリビュートのDelete Ruleプロパティを設定していますが、これはデータベース用語では外部キーに相当します。

このプロパティで使用できる値は、下記のとおりです。

  • Protect
  • Delete
  • Ignore

各値の説明については、以下をご覧ください。

Protect削除規則

この値は、エンティティAとエンティティBとの間に関係があり、参照アトリビュートがエンティティBにあるという前提で、関連するレコードがエンティティBに存在している間はエンティティAのレコードを削除できないようにします。エンティティBに関連するレコードをまだ持っているエンティティAを削除しようとすると、プラットフォームサーバーがデータベース例外を返し、そのオペレーションは実行されません。

Protect動作を実装するには、参照アトリビュートのDelete RuleプロパティをProtect値に設定します。その結果、参照アトリビュートにデータベース制約が作成されます。

Protectは、モジュールのエンティティと他のモジュールによって公開されたエンティティとの間の関係における、Delete Ruleプロパティのデフォルト値です。

Service Studioでは、プラットフォームデータベースに保存されている複数エンティティ間の関係でProtect削除規則を使用でき、これにより参照整合性が保証されます。エンティティとエンティティ参照との間で関係を作成する際、Protect規則が使用できるのは、エンティティ参照のプロデューサがモジュールである場合のみであるため注意が必要です。それ以外の場合は、削除規則はIgnoreである必要があります。

ビジネスルールとしては、Orderは1つのCustomerにのみ属しており、Customerは1つまたは複数のOrderを持つ場合があります。したがって、これらのエンティティ間には1対多の関係があり、OrderCustomerへの参照アトリビュートCustomerIdを持っています。

一方、 関連するOrdersが存在する場合はCustomerを削除できない、というビジネスルールもあります。したがって、Customerを削除するには、その前に、そのCustomerが発行したOrderをすべて削除する必要があります。

これらのビジネスルールを実装するには、OrderエンティティのCustomerIdアトリビュートを編集し、Delete Ruleプロパティを[Protect]に設定します。

Delete削除規則

エンティティAとエンティティBとの間に関係があり、参照アトリビュートがエンティティBにあるという前提で、エンティティAのレコードを削除すると、エンティティBの関連するレコードもすべて削除されることを暗に意味しています。この仕組みは一般的に「カスケード削除」として知られています。

Delete動作を実装するには、参照アトリビュートのDelete RuleプロパティをDelete値に設定します。その結果、参照アトリビュートにデータベース制約が作成されます。

Service Studioでは、プラットフォームデータベースに保存されている複数エンティティ間の関係でDelete削除規則を使用でき、これにより参照整合性が保証されます。エンティティとエンティティ参照との間で関係を作成する際、削除規則オプションが使用できるのは、エンティティ参照のプロデューサがモジュールである場合のみであるため注意が必要です。それ以外の場合は、削除規則はIgnoreである必要があります。

ビジネスルールとしては、Order_Itemは1つのOrderにのみ属しており、Orderは1つまたは複数のOrder_Itemを持ちます。したがって、これらのエンティティ間には1対多の関係があり、Order_ItemOrderへの参照アトリビュートOrderIdを持っています。

一方、Orderが削除されると、関連するすべてのOrder_Itemも削除される、というビジネスルールもあります。

これらのビジネスルールを実装するには、Order_ItemエンティティのOrderIdアトリビュートを編集し、Delete Ruleプロパティを[Delete]に設定します。

Ignore削除規則

エンティティAとエンティティBとの間に関係があり、参照アトリビュートがエンティティBにあるという前提で、エンティティAのレコードを削除すると、関連するレコードがエンティティBに存在しいている場合でもエンティティAのレコードだけが削除されることを意味しています。

Ignoreは、モジュールのエンティティと他の拡張機能によって公開されたエンティティとの間の関係における、Delete Ruleプロパティのデフォルト値です。

このタイプの削除規則はデータベース制約を必要としないため、エンティティと、自分のモジュールへの参照として追加した別のエンティティとの間の関係に使用できます。そのエンティティのプロデューサがモジュールであるか拡張機能であるかは問いません。

この削除規則は参照整合性を保証しないため、データベースにはいかなる制約も作成されません。したがって、参照アトリビュートのDelete RuleプロパティがIgnoreに変更された場合、対応する自動インデックスは、そのプロパティのいずれかが変更されない限り、削除されます。

Orderの状態に関するすべてのオペレーションや変更はOrder_Historyに記録する必要がある、ということもビジネスルールの1つです。

1つのOrder_Historyは1つのOrderのみを扱っており、Orderは1つまたは複数のOrder_Historyを持ちます。したがって、これらのエンティティ間には1対多の関係があり、Order_HistoryOrderへの参照アトリビュートOrderIdを持っています。

Orderが削除された場合でも、Order_Historyは保持されます。

これらのビジネスルールを実装するには、Order_HistoryエンティティのOrderIdアトリビュートを編集し、Delete Ruleプロパティを[Ignore]に設定します。

  • Was this article helpful?