2012-03-11 47 views
1

我有一個MySQL數據庫與ItemsStores表,查找表ItemStores,像這樣:如何組織來自數據庫的數據?

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; 

應用商店的物品和商店在ObservableCollections S的ItemStore對象,而一些WPF控件綁定到這些ObservableCollections S,就像這樣:

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數據中心。我正在考慮在每個Item中有一個HashTable,它將storeID映射到每個Store中的項目數量。假如我偶爾會通過itemId搜索Item,有沒有更好的方法來繪製它?我已經運行了一個SELECT * FROM Items來填充ObservableCollection,我擔心運行另一個查詢來從每個商店獲取數量將會真正影響MySQL。 A JOIN不會幫助,因爲我不知道將返回多少商店併爲同一項目返回多行(每個商店都有一行)會使數據進入ObservableCollection變得非常痛苦。

回答

1

我不會走這條路。您很快就會發現自己構建了一個ORM,而不是使用它。 Furhermore將整個數據庫讀入內存集合是個不好的主意,因爲一旦您意識到數據已過時並開始重新加載所有內容,它就會變成性能問題。

對於原始問題,ORM類將相關子元素的集合作爲屬性,因此您不必搜索所有元素 - 您將找到一個Store並讀取所有ItemStore對象。如果您需要所有商店中的物品清單,您需要向數據庫索取該信息。

+0

你是指NHibernate? – dotancohen 2012-03-12 00:27:22

+0

或任何其他支持MySql的。 – 2012-03-12 00:29:25