2012-08-09 58 views
0

我有几个结构:用户,项目,FavouriteItem。ASP.NET MVC实体框架如何构建这个代码

用户有很多项目,可以有很多faourite项目(这只是链接到项目)。

我已经得到了无论是创建模型的决定:“FavouriteItem”,给用户的这些列表,或者存储喜爱的项目ID在用户表中的列。即favourite_items:“1,2,5,9”。

后者看起来好像用户基数增长会快很多,但后来我不得不拆分字符串,创建数组e.t.c,这会更痛苦一点。

什么是推荐的选择,在这里做?我已经完成了早期的选择,并喜欢它的灵活性/易用性,但有点担心它的可扩展性。

回答

3

怎么样的用户,项目,UserItem(其中有一个IsFavouriteItem位字段,所以用户ID,项目Id,IsFavouriteItem作为列链接表)?

1

最好的选择取决于您在应用程序中遇到的查询模式。我将假设项目是特定于用户而不是用户之间共享的。根据你说的话,我会去的结构是这样的:

public class User 
{ 
    public IList<Item> Items { get; set; } 
    public IEnumerable<Item> FavoriteItems 
    { 
     get 
     { 
      return from i in Items where i.IsFavorite select i; 
     } 
    } 
} 

public class Item 
{ 
    public bool IsFavorite { get; set; } 
} 

这将很好地工作,如果每个用户的项目列表并不大,即使你有很多用户和很多项目。

1

就速度而言,如果您希望表中存储大量数据,将FavouriteItems存储在User表中可能会更有效。但是,如果你想要一个干净的,结构化的数据库,那么我会引入一个外键表UserItems与一个Favourite列,例如。

UserItems 
---------   
UserId   
ItemId 
Favourite 

如果您开始遇到瓶颈问题,您可以随时优化您的查询。