我正在为我的学校项目使用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)如果产品被删除,我可以从“收藏夹”表中清除数据的方式是什么。
我正在考虑以下方式
这两种方法中哪个更好,或者我在这里缺少什么
答案 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 的所有收藏夹记录都将被删除为好吧。