私は親テーブルをAと言い、子はBと言い、BはAの主キーを参照しているので、ほとんどの人は親Aから削除するときにテーブルを変更するために削除カスケードを使用します.私の質問は: 「カスケード削除時」は必要ありませんか? 使えなくなるのはどんなとき?
2 に答える
製品は通常、カテゴリの「子」ではないため、Marc B の例は好きではありません。製品とカテゴリは、多対多の関係で重複できます。
親がなくてもデータがまだ有用な状況では、ON DELETE SET NULL があります。
例えば
translations
列id
、translation_category
、from_text
、を含むテーブルがあるとします。to_text
そのテーブルには、さまざまなテキストからテキストへの翻訳が含まれています。はtranslation_category
、翻訳が主に使用される特定のフィールドを参照する外部キーです。ただし、異なる値に対して繰り返される可能性があるため、そのキーを無視して共通値from_text
と値の数を取得するクエリを実行することもできます。to_text
translation_category
translation_category
親レコードの 1 つを削除したとしても、そのデータはおそらく有用です。そこで、ON DELETE SET NULL を使用します。
もちろん、同じスキーマを変更しtranslation_category
て多対多のリンク テーブルに配置することもできますが、同じ原則が適用されます。
テーブルのメンテナンス/リカバリ中に、DBA は削除カスケードを一時的にオフにすることがあります。これにより、たとえば、テーブルの外部のデータに損傷や影響を与えることなく、親テーブルを空にして再ロードできます。