ユーザー、オファー、ジャンクション テーブル users_offers があります。
ユーザーまたはオファーを削除したときにジャンクション データが自動的に削除されるように、外部キー リレーションを使用して実行できるセットアップはありますか?
ユーザー、オファー、ジャンクション テーブル users_offers があります。
ユーザーまたはオファーを削除したときにジャンクション データが自動的に削除されるように、外部キー リレーションを使用して実行できるセットアップはありますか?
参照アクションを宣言します: ON DELETE CASCADE。例:
CREATE TABLE user (
user_id int PRIMARY KEY
);
CREATE TABLE offer (
offer_id int PRIMARY KEY
);
CREATE TABLE user_offer (
user_id int,
offer_id int,
PRIMARY KEY (user_id, offer_id),
FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES offer (offer_id) ON DELETE CASCADE
);
興味深いことに、「省略形」の外部キー構文で参照アクションを指定しても機能しないようです (MySQL 5.5.30、5.6.6 m9 で確認済み)。以下は解析されますが、user
が削除されても、対応するものは削除user_offer
されません。
CREATE TABLE user_offer (
user_id int REFERENCES user (user_id) ON DELETE CASCADE,
offer_id int REFERENCES offer (offer_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, offer_id)
);
モデル作成でこれを指定できます。
CREATE TABLE users_offers (user_id INT NOT NULL,
offer_id INT NOT NULL,
PRIMARY KEY (user_id, offer_id),
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE,
FOREIGN KEY (offer_id) REFERENCES offers(id)
ON DELETE CASCADE);
この Fiddleで実際の例を見ることができます。