2013-01-22 113 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引用外國等... –