开发电影收藏Web应用:Bookmark作为关联表还是拆分为两张?
收藏电影应用数据表设计建议
不需要拆分出UserBookmark和BookmarkMovies两张表,你当前的Bookmark表设计是合理的。
原因很直白:
- 你的
Bookmark表不是单纯的用户-电影关联表,它还带有Review字段,用来存储用户对收藏电影的评价,这已经是一个带业务属性的中间实体,而非仅用于连表的纯关联表。 - 拆分两张表完全是画蛇添足,会增加数据冗余和查询复杂度。比如拆分后,你得在两张表分别存关联关系,
Review字段还要额外找地方存放,后续查询用户的收藏列表及对应评价时,需要多表关联,反而更麻烦。
给你个小优化建议:
因为一个用户不能重复收藏同一部电影,所以要给Bookmark加唯一约束。要么把UserId和MovieId设为复合主键,代码可以这么改:
public class Bookmark { [Key] [Column(Order = 0)] public int UserId { get; set; } [Key] [Column(Order = 1)] public int MovieId { get; set; } public virtual User User { get; set; } public virtual Movie Movie { get; set; } public int Review { get; set; } }
要么单独加一个Id主键,再用[Unique]特性约束UserId和MovieId的组合,两种方式都能避免重复收藏的问题。
内容的提问来源于stack exchange,提问作者dyzhuu
相关产品推荐
相关产品推荐

