0

User、Item、FavouriteItem という構造がいくつかあります。

ユーザーは多くのアイテムを持っており、多くのお気に入りアイテム (アイテムにリンクするだけ) を持つことができます。

モデル「FavouriteItem」を作成してユーザーにこれらのリストを提供するか、お気に入りのアイテムIDをユーザーテーブルの列に保存するかを決定しました。つまり、favourite_items: "1,2,5,9" です。

後者は、ユーザーベースが拡大するとはるかに高速になるようですが、文字列を分割したり、配列を作成したりする必要があり、少し面倒です。

ここで推奨される選択は何ですか? 私はすでに以前のオプションを実行しており、その柔軟性/使いやすさが気に入っていますが、そのスケーラビリティについて少し心配しています.

4

3 に答える 3

3

User、Item、UserItem (IsFavouriteItem ビット フィールドを持つリンク テーブル。列として UserId、ItemId、IsFavouriteItem) はどうですか?

于 2012-08-09T08:13:04.773 に答える
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; }
}

多くのユーザーと多くのアイテムがある場合でも、ユーザーごとのアイテムのリストがそれほど大きくない場合、これはうまく機能します。

于 2012-08-09T08:16:11.083 に答える
1

速度の点では、テーブルに大量のデータを格納することが予想される場合はFavouriteItems、テーブルに格納する方が効率的かもしれません。Userただし、クリーンで構造化されたデータベースが必要な場合は、列UserItemsを持つ外部キー テーブルを導入します。Favourite

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

ボトルネックが発生し始めた場合は、いつでもクエリを最適化できます。

于 2012-08-09T08:17:07.807 に答える