У меня есть база данных MySQL с таблицами для Items
и Stores
, а также таблица поиска 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
с Item
и Store
объекта, и некоторые элементы управления WPF связаны с этими 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
. Я думаю о наличии HashTable в каждом Item
, который отображает storeID
на количество предметов в каждом Store
. Есть ли лучший способ отобразить его, предполагая, что я буду время от времени искать Item
по его itemId
? Я уже запускаю SELECT * FROM Items
для заполнения ObservableCollection, я боюсь, что выполнение другого запроса для получения количества из каждого хранилища действительно будет бить MySQL. JOIN
не поможет, так как я не знаю, сколько магазинов будет возвращено, и возвращая несколько строк для одного и того же элемента (по одной строке для каждого магазина, в котором он хранится), будет затруднительно поместить данные в ObservableCollection.