首页 > 解决方案 > 从映射器表中删除过时的数据

问题描述

我正在使用 C# 和 Microsoft sql server 为我的学校项目设计以下实体

用户表——存储用户信息的用户表

产品表 - 存储产品信息的产品表

收藏夹表 - 用户产品收藏夹表,将 userId 和 productId 映射为收藏夹

用户收藏产品 PUT - /users/{userId}/products/{productId}/favorites

检查 userId 和 productId 是否存在,并在收藏夹表中插入一个带有 userId 和 productId 的条目

用户取消收藏产品删除 - /users/{userId}/products/{productId}/favorites

检查 userId 和 productId 是否存在并从收藏夹表中删除现有条目(userId,productId)

列出用户 GET 最喜欢的所有产品 - /users/{userId}/favorites - 将返回 productIds 列表

我正在考虑为用户列出所有喜欢的产品的以下用例的处理方法

1)如果产品被删除,我可以通过哪些方式清理收藏夹表中的数据。

我正在考虑以下方法

这两种方法中哪一种更好,或者我在这里缺少什么

标签: c#sql-serverdatabase-designsystem-design

解决方案


您应该使用外键将收藏夹表中的 product_id 链接到 products 表中产品的 id。这样,您可以定义在删除特定产品时对相关收藏夹执行的操作。

由于您没有提供数据库架构,因此代码可能需要根据您的列定义进行一些调整。

ALTER TABLE db.Favorites
ADD CONSTRAINT FK_Favorites_Products
    FOREIGN KEY (ProductID) REFERENCES db.Products(ID) ON DELETE CASCADE

通过该查询,您可以在Favorites表上定义一个外键(称为 FK_Favorites_Products) ,它将ProductID列映射到Products 的 ID。这也将防止收藏表中的记录具有与 Products 表的任何 ID 都不匹配的 ProductID。

每当删除产品时,所有ProductID = 您要删除的产品的 ID的收藏夹记录也将被删除。


推荐阅读