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

C# 如何组织数据库中的数据?,c#,mysql,design-patterns,C#,Mysql,Design Patterns,我有一个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 u

我有一个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;
应用程序将项目存储在
Item
Store
对象的
observedcollections
s中,一些WPF控件绑定到这些
observedcollections
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; }
}
公共类存储
{
public int storeId{get;set;}
公共字符串storeName{get;set;}
公共重写字符串ToString()
{
把这个还给我;
}
}
私有静态ObservableCollection _stores=新ObservableCollection();
公共静态可观测集合存储
{
获取{return\u stores;}
}
公共类项目
{
公共int itemId{get;set;}
公共字符串说明{get;set;}
税前公共十进制价格{get;set;}
公共重写字符串ToString()
{
返回此.description;
}
}
私有静态ObservableCollection_items=新ObservableCollection();
公共静态可观测集合项
{
获取{return\u items;}
}

现在我的难题集中在如何分配
ItemStores
数据。我正在考虑在每个
项目中设置一个哈希表,将
storeID
映射到每个
商店中项目的数量。假设我偶尔会通过它的
itemId
搜索
Item
,是否有更好的方法来映射它?我已经在运行一个
SELECT*FROM Items
来填充ObservableCollection,我担心运行另一个查询来获取每个商店的数量会真正影响MySQL。一个
JOIN
不会有帮助,因为我不知道将返回多少个存储,并且为同一个项目返回多行(每个携带它的存储一行)将使将数据放入ObservableCollection成为一件痛苦的事。

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


至于最初的问题,ORM类将相关子类的集合作为属性,所以您不必搜索所有子类—您将找到一个存储并读取所有ItemStore对象。如果你需要所有商店的商品清单,你会向数据库询问这些信息。

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


至于最初的问题,ORM类将相关子类的集合作为属性,所以您不必搜索所有子类—您将找到一个存储并读取所有ItemStore对象。如果您需要所有商店中的商品列表,您将向数据库询问该信息。

您指的是NHibernate?或任何其他支持MySql的产品。您指的是NHibernate?或任何其他支持MySql的产品。