2012-03-11 2 views
1

У меня есть база данных 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. A JOIN не поможет, поскольку я не знаю, сколько магазинов будет возвращено и возвратит несколько строк для одного и того же элемента (одна строка для каждого хранилища, который несет его) заставит больно поместить данные в ObservableCollection.

ответ

1

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

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

+0

Вы имеете в виду NHibernate? – dotancohen

+0

Или любой другой, поддерживающий MySql. –

Смежные вопросы