(編集)
春やHibernateのようなフレームワークへの参照がなければ、あなたは単にとき、すべての関連レコードを削除するために、外部キー列上の制約を使用してデータベーステーブルを設定することができます「ユーザー」レコードが削除されます。制約はON DELETE CASCADE
と呼ばれ、結合された表の外部キー列に定義すると、RDBMSは削除されたレコードの選択されたユーザーIDと外部キーが一致するすべてのレコードを自動的に削除します。
具体的には、使用しているデータベースサーバーの詳細については、ON DELETE CASCADE
制約に関する調査をお試しください。
CREATE TABLE product (
category INT NOT NULL, id INT NOT NULL,
price DECIMAL,
PRIMARY KEY(category, id)
) ENGINE=INNODB;
CREATE TABLE customer (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE product_order (
no INT NOT NULL AUTO_INCREMENT,
product_category INT NOT NULL,
product_id INT NOT NULL,
customer_id INT NOT NULL,
PRIMARY KEY(no),
INDEX (product_category, product_id),
INDEX (customer_id),
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
ON DELETE CASCADE,
FOREIGN KEY (customer_id)
REFERENCES customer(id)
) ENGINE=INNODB;
例はproduct
とproduct_order
との関係を示している:
(編集#2)は ここMySQL documentationから修飾例です。 product
テーブル(単に単にDELETE FROM product WHERE id=... and category=...
を実行している)からレコードを削除すると、product_order
テーブル内のすべての参照レコードは、追加のSQL文なしで自動的に削除されます。 一方、customer
テーブルから行を削除すると、デフォルトの制約でそのような場合にレコードの削除操作が制限されるため、今取得しているのと同じエラーが表示されます。
を参照してください。どのようにマップしましたか? 'カスケード'ポリシーやその他のものは何ですか? –