2

子と親のデータベースを作成しようとしています。テーブルは次のようになります。

ChildTable : 子 ID (pk) | 親 ID (fk) | 名前

ParentTable :親 ID (pk) | 名前

FOREIGN KEY ParentTable(parent-id) REFERENCES ChildTable(parent-id) ON DELETE CASCADE

問題: 親は複数の子を持つことができ、親テーブルは子テーブルに依存しています。親に 2 人の子がいて、ChildTableから 1 つの子レコードを削除すると、親も削除されますが、レコードがまだデータベースにある別の子には親レコードが存在する必要があります。

上記の要件を満たすことができる他の MySQL メソッド/制約はありますか。

前もって感謝します。

更新:私の問題を詳しく説明したいと思います。

次のルールをデータベースに適用したい:

  • 親テーブルのレコードは、常に子テーブルの 1 つまたは 2 つのレコードに従属している必要があります。(同じために FK が追加されました。)
  • 2 つの子が同じ親 ID を指す可能性があります
  • 親 ID (「abc」など) を持つ 1 つの子を削除する場合、同じ親 ID を持つ別の子が存在する場合、親 ID を削除してはなりません。
  • 同じparentID('abc')を持つ2番目の子を削除すると、parentID('abc')を持つ子がないため、削除する必要があります。
4

1 に答える 1

3

外部キーを逆にする必要があります。

FOREIGN KEY parent-id REFERENCES ParentTable(parent-id) ON DELETE CASCADE

子テーブルが親テーブルの主キーを参照するようにします。ただし、カスケード削除には注意してください。親行を削除すると、そのすべての子行が自動的に削除されます。

1 つの子行を削除しても、親行には何も起こりません。

UPDATE : あなたが望むことは、トリガーを使用してのみ達成できます。行を削除できるかどうかをチェックするAFTER DELETEトリガーを作成する必要があります。ChildTableParentTable

于 2012-07-20T08:01:23.650 に答える