gpt4 book ai didi

mysql - 数据透视表的外键和约束,删除级联

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:34 25 4
gpt4 key购买 nike

我设计了我的数据库结构,如下所示,以支持创建多个商店和分配给这些商店的用户。我的表使用 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

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

最佳答案

创建删除链:将 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)

关于mysql - 数据透视表的外键和约束,删除级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com