2012-03-11 10 views
1

私はこのように、Items用とStoresのテーブル、およびルックアップテーブルItemStoresとMySQLデータベースを持っている:データベースからデータを整理する方法は?

CREATE TABLE IF NOT EXISTS Items (
    itemId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    description VARCHAR(256) NOT NULL DEFAULT '', 
    priceBeforeTax DECIMAL(10,2) NOT NULL, 
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 

CREATE TABLE IF NOT EXISTS Stores (
    storeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    storeName VARCHAR(128) NOT NULL, 
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 

CREATE TABLE IF NOT EXISTS ItemStores (
    storeId INT NOT NULL REFERENCES Stores(storeId), 
    itemId INT NOT NULL REFERENCES Items(itemId), 
    quantity INT NOT NULL 
) DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 

アプリケーションがItemStoreオブジェクトのObservableCollections s内のアイテムや店舗を格納し、そしていくつかのWPF

public class Store 
{ 
    public int storeId { get; set; } 
    public string storeName { get; set; } 

    public override string ToString() 
    { 
     return this.branchName; 
    } 
} 
private static ObservableCollection<Store> _stores = new ObservableCollection<Store>(); 
public static ObservableCollection<Store> Stores 
{ 
    get { return _stores; } 
} 


public class Item 
{ 
    public int itemId { get; set; } 
    public string description { get; set; } 
    public decimal priceBeforeTax { get; set; } 

    public override string ToString() 
    { 
     return this.description; 
    } 
} 
private static ObservableCollection<Item> _items = new ObservableCollection<Item>(); 
public static ObservableCollection<Item> Items 
{ 
    get { return _items; } 
} 

今私のジレンマはItemStoresデータを割り当てる方法を中心:そのようコントロールは、これらのObservableCollections秒にバインドされています。私は各ItemのHashTableについて、storeIDを各Storeの項目の数量にマッピングすることを考えています。時にはItemitemIdで検索することを前提に、マップするより良い方法はありますか? ObservableCollectionにデータを埋め込むために既にSELECT * FROM Itemsを実行していますが、各ストアから数量を取得するために別のクエリを実行すると、実際にMySQLが損なわれる恐れがあります。 A JOINは、返されるストアの数がわかっていないため、同じアイテム(それを運ぶ各ストアの1つの行)に複数の行を返すと、ObservableCollectionにデータを入れるのに苦労します。

答えて

1

私はその道を取っていません。すぐにORMを作成する代わりにORMを作成することになります。さらに、データベース全体をメモリコレクションに読み込むことは悪い考えです。なぜなら、データが古くなってすべてが読み込まれるようになったら、パフォーマンス上の問題になるからです。

ORMクラスは、関連する子のコレクションをプロパティとして持つため、すべてを検索する必要はありません。Storeを見つけて、すべてのItemStoreオブジェクトを読み込みます。すべての店舗で商品のリストが必要な場合は、データベースにその情報を尋ねます。

+0

あなたはNHibernateを参照していますか? – dotancohen

+0

またはMySqlをサポートするその他のもの。 –

関連する問題