OnDelete (プロパティ・キーワード)
使用法
関連するオブジェクトが削除されたときに、現在のテーブルで実行するアクションを指定するには、以下の構文を使用します。
Relationship relname As classname [ Cardinality = cardinality, Inverse = inverse, OnDelete = ondelete ];
ondelete は以下のいずれかの値になります。この説明では、関連するレコードはリレーションシップの相手側に属するレコードまたはオブジェクトであり、参照元レコードはリレーションシップのこちら側にあるレコードまたはオブジェクトです。
-
cascade — 関連するレコードを削除した場合、このテーブル内の参照元レコードも削除されます。
-
noaction — 関連するレコードの削除を試みた場合、失敗します。
-
setdefault — 関連するレコードを削除した場合、このテーブル内の参照元レコードはその既定値に設定されます。
-
setnull — 関連するレコードを削除した場合、このテーブル内の参照元レコードは NULL に設定されます。
詳細
このキーワードは、リレーションシップの相手側でレコードが削除されたときに発生する参照アクションを定義します。
既定値
このキーワードを省略すると、以下のようになります。
-
Parent である Cardinality とのリレーションシップの場合、OnDelete は cascade です。つまり、親レコードを削除する場合、既定では、関連する子レコードが削除されます。
-
One である Cardinality とのリレーションシップの場合、OnDelete は noaction です。つまり、“1” レコードの削除を試みた場合、既定ではそれを指すレコードが相手のテーブルにあれば失敗します。
例
Class MyApp.Employee Extends %Persistent {
...
Relationship Employer As MyApp.Company [ Cardinality = one, Inverse = Employees, OnDelete = cascade ];
}
この例は、会社 (company) と従業員 (employee) との間の一対多リレーションシップを示しています。ここに示すように、Cardinality は、会社がリレーションシップの “One” の側であることを示す一方で、OnDelete は、会社を削除した場合の従業員への効果を示します。OnDelete の値は cascade であるため、会社を削除すると、その効果がカスケードされて従業員も削除されます。
OnDelete の値が noaction (一対多のリレーションシップの既定値) である場合、その会社を雇用主とする従業員がいると、会社を削除することはできません。
OnDelete の値が setnull または setdefault の場合、会社を削除すると、従業員の雇用主が NULL に設定されます。
関連項目
-
このドキュメントの “プロパティ定義”
-
"クラスの定義と使用" の “リレーションシップの定義と使用”
-
"クラスの定義と使用" の “コンパイラ・キーワードの概要”