Как организовать данные из базы данных? - PullRequest
1 голос
/ 12 марта 2012

У меня есть база данных 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.

1 Ответ

1 голос
/ 12 марта 2012

Я бы не пошел по этой дороге.Вы скоро обнаружите, что строите ORM вместо того, чтобы использовать его.Более того, считывание всей базы данных в коллекции памяти - плохая идея, потому что это станет проблемой производительности, как только вы поймете, что ваши данные устарели, и начнете перезагружать все.так что вам не придется искать их все - вы найдете магазин и прочитаете все объекты ItemStore.Если вам нужен список товаров во всех магазинах, вы запросите эту информацию в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...