我发现很难为列表功能设计数据库架构。将有一个主列表,然后可以将其划分为更多列表。
每个用户都可以将候选人标记为最喜欢的候选人,并且可以有很多喜欢的候选人。
如果候选人从列表中删除,那么它应该仍然是收藏夹的一部分,或者是主要的favoirtes列表的一部分而不属于特定的列表。
如上图所示我允许FavouritesListId可以为空,这样如果列表项与某个列表没有关联,这意味着它仍然是有利的,但不是特定列表的一部分。 我想知道这是否是最佳解决方案,或者是否有更好的设计方法。
我猜我的设计有问题,因为当我使用Entity框架映射我的表时,它最终会产生循环依赖,如下所示:
public partial class Model1 : DbContext
{
public Model1()
: base("name=Model1")
{
}
public virtual DbSet<Candidate> Candidates { get; set; }
public virtual DbSet<FavouritesList> FavouritesLists { get; set; }
public virtual DbSet<FavouritesListItem> FavouritesListItems { get; set; }
public virtual DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Candidate>()
.HasMany(e => e.FavouritesListItems)
.WithRequired(e => e.Candidate)
.WillCascadeOnDelete(false);
modelBuilder.Entity<User>()
.HasMany(e => e.FavouritesListItems)
.WithRequired(e => e.User)
.WillCascadeOnDelete(false);
}
}
如上面的代码所示,候选人最终有很多恩惠,这不是我的意图。