c# - 如何组织数据库中的数据?

标签 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;

应用程序将 Items 和 Stores 存储在 ItemStore 对象的 ObservableCollections 中,一些 WPF 控件绑定(bind)到这些 ObservableCollections,像这样:

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

最佳答案

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

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

关于c# - 如何组织数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659631/

相关文章:

下拉菜单的 C# Pager 问题

php - 将随机行从一个 MySQL 表复制到另一个具有不同模式的 MySQL 表

mysql - sql模式的设置在mysql中不起作用

asp.net - 从 ASP.net Web 服务返回大量数据时有哪些好的做法?

design-patterns - 设计方法 : use case driven vs. 域驱动

JavaScript:模块模式差异

c# - 在Elasticsearch的查询DSL中使用 `MatchPhrasePrefix`

c# - 以下构造函数参数没有匹配的夹具数据

c# - 如何测试 MVC View ?

java - 如何解决对全局设置/事件注册表的类型安全异议?