如何组织数据库中的数据?

时间:2012-03-11 22:42:30

标签: c# mysql design-patterns

我有一个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;

应用程序将项目和商店存储在ObservableCollectionsItem对象的Store中,并且某些WPF控件绑定到这些ObservableCollections,如下所示:< / p>

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中的项目数量。是否有更好的方法来映射它,假设我偶尔会通过其Item搜索itemId?我已经运行了SELECT * FROM Items来填充ObservableCollection,我担心运行另一个查询以从每个商店获取数量将真正打击MySQL。 JOIN将无济于事,因为我不知道将返回多少商店并为同一商品返回多行(每个存储一行的商店)将使数据放入的ObservableCollection。

1 个答案:

答案 0 :(得分:1)

我不会走那条路。您很快就会发现自己正在构建ORM而不是使用ORM。此外,将整个数据库读入内存集合是个坏主意,因为一旦您意识到数据已过时并开始重新加载所有内容,它就会成为性能问题。

对于原始问题,ORM类将相关子集合作为属性,因此您不必搜索所有这些 - 您将找到一个Store并读取所有ItemStore对象。如果您需要所有商店中的商品列表,您将向数据库询问该信息。