从映射器表中删除陈旧数据

时间:2019-04-16 17:28:55

标签: c# sql-server database-design system-design

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

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

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

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

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

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

用户不喜欢产品 删除-/ users / {userId} / products / {productId} /收藏夹

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

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

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

1)如果产品被删除,我可以从“收藏夹”表中清除数据的方式是什么。

我正在考虑以下方式

  • 删除产品时,还要从“收藏夹”表中删除条目(userId,productId)。
  • 在GET通话期间,为用户获取所有喜欢的产品,我遍历每个productId以检查该产品是否存在

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

1 个答案:

答案 0 :(得分:0)

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

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

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

使用该查询,您可以在收藏夹表上定义一个外键(称为FK_Favorites_Products),该表将 ProductID 列映射到 ID产品。 这样也可以防止在收藏夹表中具有与产品表的任何ID不匹配的产品ID的记录。

无论何时删除,具有要删除产品的 ProductID = ID 的所有收藏夹记录都将被删除为好吧。