c# - 从映射器表中删除过时的数据
问题描述
我正在使用 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)如果产品被删除,我可以通过哪些方式清理收藏夹表中的数据。
我正在考虑以下方法
- 从收藏夹表中删除条目(userId,productId)以及删除产品时。
- 在为用户获取所有喜欢的产品的 GET 调用期间,我遍历每个 productId 以检查产品是否存在
这两种方法中哪一种更好,或者我在这里缺少什么
解决方案
您应该使用外键将收藏夹表中的 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的收藏夹记录也将被删除。
推荐阅读
- javascript - 带有 Firebase 实时数据库的 GoogleMap - Javascript
- php - Wordpress 如何将 wp_post 记录转换为页面?
- swagger - 模型 OpenAPI 2.0 文件下载,类型字符串:二进制与类型文件
- go - 反映价值问题
- java - 如何在 java 图形中使用 x 和 y 坐标定位形状?
- go - 如何定义系统重启的回调函数
- angular - 将 .tsconfig 和 .tslint 文件移动到不同的目录
- java - DBCP 连接池
- python - 什么是改变 Dask Dataframe 的更干净的方法?
- ios - MPMediaQuery 在回调之前等待媒体对话框完成