2013-01-22 71 views
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 

但是我应该如何处理数据透视表?我应该如何在这些表上声明约束或外键才能完成工作并保证安全?

回答

0

创建缺失的链:添加FK约束到枢轴表([C]),或[d]取决于C,下面)操作

Delete(A) -> Delete(C) -> Delete(D) 
Delete(B) -> Delete(C) -> Delete(D) 
+0

[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 

顺序,从而在每种情况下,流程如下:删除(实体),然后删除(PIVOTS)?你可以使用问题的实体来展示你的流程吗? – mallix

+0

流从什么被删除 - 说X,然后是什么提到X作为外国 - 说Y,然后是什么Y引用外国等... –