C# 如何组织数据库中的数据?
我有一个MySQL数据库,其中包含用于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
项目
和存储
的表,以及一个查找表项目存储
,如下所示:
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的产品。