1

与えられた:

グループには多くの人がいます

ただし、関係は独立しています (つまり、個人はグループに属さずに存在できます)。グループを削除するときに、個人のテーブル (つまり、group_id) の外部キーを 0 (または NULL) に設定する必要がありますか? そうしないと、その人は存在しないグループに所属しようとします。

私が尋ねる理由は、これが Cakephp のデフォルトの動作だからです。dependent を true に設定すると、関連付けられたモデルが削除されますが、false に設定すると、関連付けられたモデルはそのまま残ります。

4

4 に答える 4

3

はい、外部キーはNULL(または、これが選択した「グループなし」の値の場合は0)に設定する必要があります。そうしないと、参照整合性が失われます。データベースがそれをサポートしている場合は、フレームワークで「削除時」トリガーまたはカスケードルールを設定してこれを適用できるはずです。そして、CakePHPの振る舞いは正しいようです。値が依存している場合は、削除時に削除する必要があります。依存していない場合は、実行する正しいアクションに関して追加の動作ロジックを指定する必要があります(この場合、すべての値をNULLに設定します。それ以外の場合は、「デフォルト」グループに設定する必要があります。 、など)

于 2008-09-29T10:21:01.273 に答える
1

一言で言えば、そうです。外部キーを個人テーブルに残すと、データベース内の参照整合性が失われます。

于 2008-09-29T10:16:58.897 に答える
0

>そうでない場合、その人は存在しないグループに所属しようとします。

さらに悪いシナリオもあります。将来、削除されたグループAのIDを再利用する新しいグループBが表示される可能性があります。その後、以前のAグループのすべてのユーザーが「魔法のように」新しいグループBに参加します。

于 2008-09-29T10:32:35.800 に答える