3

複数のショップとそれらのショップに割り当てられたユーザーの作成をサポートするために、以下のようなデータベース構造を設計しました。私のテーブルは InnoDB ストレージ エンジンを使用しています。

[user]  
user_id 

[user_profile]  
user_profile_id  
user_id

[user_to_shop] PIVOT 
user_id  
shop_id

[shop]  
shop_id

[shop_profile]  
shop_profile_id  
shop_id  

[category_to_shop] PIVOT  
category_id  
shop_id

[category]  
category_id

[category_description]  
category_description_id  
category_id 

[product_to_category] PIVOT  
product_id
category_id

[product_to_shop] PIVOT
product_id
shop_id

[product]
product_id

...  
...

私が達成したいのは、ユーザー(user_id)が削除されたときに、関連するすべてのレコード(カテゴリレコード、ショップレコード、...、...)を削除することです。

エンティティごとに制約を作成しました。したがって、user_id(1) を削除すると、エンジンは user_profile(user_id(1)) も削除します。

ALTER TABLE `user_profile`
ADD CONSTRAINT `user_profile_cs1`
FOREIGN KEY (`user_id`) REFERENCES `user`(`user_id`)
ON DELETE CASCADE

しかし、ピボット テーブルをどうすればよいでしょうか。これらのテーブルで制約または外部キーを宣言して、作業を完了して安全にする方法は?

4

1 に答える 1

0

削除のチェーンを作成します。ピボット テーブルに FK 制約を追加します ([C]) または C に依存する [D]、以下)。

[A]
idA
dataA

[B]
idB
dataB

[C]
idC
idA
FOREIGN KEY (idA) REFERENCES A(idA)
ON DELETE CASCADE
idB
FOREIGN KEY (idB) REFERENCES B(idB)
ON DELETE CASCADE

[D]
idD
idC
FOREIGN KEY (idC) REFERENCES C(idC)
ON DELETE CASCADE

操作の順序

Delete(A) -> Delete(C) -> Delete(D)
Delete(B) -> Delete(C) -> Delete(D)
于 2013-01-22T20:32:33.233 に答える