Прошу помощи со структурой каталога товаров

Setor

Новичок
Прошу помощи со структурой каталога товаров

Доброго времени суток!

Имеется E-магазин компьютерного железа (работает уже 1 год в БД около 40 тыс. продуктов). Главная его особенность - работа с несколькими складами (на данный момент подключено 4 склада и планируется ещё) и один продукт может находиться сразу на нескольких складах, но суть вопроса не в этом.

У нас имеется 3 таблицы:

1) products ( id продукта, ид_производителя и всякие флаги )
2) products_attributes( id атрибута, id продукта, id склада, цена, кол-во на складе, гарантия )
3) products_names ( id продукта, имя продукта ) - эта таблица изначально проектировалась под мультиязычные названия продуктов, но позже эта потребность отпала.

Клиент теперь хочет, чтобы отображалось название продукта со склада с самым выгодным предложением. Все параметры продуктов для каждого склада хранятся в таблице products_attrubites. Обновлять при каждом обновлении складов "имя продукта" в таблице "products_names" я не хочу, а планирую хранить в этой таблице название для каждого продукта с каждого склада и отображать из них те, которые относятся к самому выгодному предложению.

У меня возник такой вопрос - стоит ли хранить название продуктов для каждого конкретного склада в отдельной таблице напр, products_names( id названия, id продукта, id склада, имя продукта ) или добавить в таблицу products_attributes поле "имя продукта"?

Тип поля "имя продукта" - text, т.к. имена некоторых продуктов длиннее 255 символов, не хочется грузить products_attributes текстовыми полями. Есть ещё такой нюанс, что тип таблицы products_attributes - InnoDb, но мне понадобится делать FULLTEXT поиск по названиям продуктов, и у меня уже несколько раз возникали проблемы с таблицей названий типа MyISAM, таблица ломалась. По этому я больше склоняюсь к выделению названий продуктов в отдельную таблицу типа MyISAM. Количество записей в ней будет около 50 000 и будет медленно расти. Хотелось бы спросить общественность, правильное ли я принимаю решение? Может будут какие мнения на данный счёт?

P.S. в запросах используются так же и другие связные таблицы. И я был бы признателен, если кто знает, где в сети есть информация по проектированию БД серьёзных магазинов.
 

Marquis

Новичок
Setor
Сорри, не асилил, много букафф.
Что если начать "с самого начала"? взять таблицу вроде id, catalogue, name, price и начинать плясать от нее, добовляя потихоньку имеющийся функционал. Думаю все минусы(если они конечно реально существуют) всплывут сразу.
 

Setor

Новичок
Marquis
все таблицы уже существуют и магазин работает, просто надо сделать маленькое изменение ;)

А вопрос по сути вот он: У меня возник такой вопрос - стоит ли хранить название продуктов для каждого конкретного склада в отдельной таблице напр, products_names( id названия, id продукта, id склада, имя продукта ) или добавить в таблицу products_attributes поле "имя продукта"?
 

sage

Новичок
а что названия продуктов отличаются в зависимости от склада?
 

chira

Новичок
Setor
Клиент теперь хочет, чтобы отображалось название продукта со склада с самым выгодным предложением
создай виртуальный склад с самыми выгодными предложениями ...
другими словами таблицу ссылок на самые выгодные предложения ...
 

Setor

Новичок
а что названия продуктов отличаются в зависимости от склада?
Да, названия часто немного отличаются (но суть та же). Случаются иногда казусы, что склад перепутает Vendor-код товара и магазин посчитает 2 разных товара одинаковыми или в названии ошибутся и напишут вместо DDR3 - DDR2... Бывали уже случаи... Клиент просто хочет перестраховаться.

создай виртуальный склад с самыми выгодными предложениями ...
другими словами таблицу ссылок на самые выгодные предложения...
Это немного не то... Исходная информация с каждого склада хранится в отдельных таблицах и каждая из этих таблиц имеет свой набор полей. Если только информацию со всех складов забить в одну таблицу, приведя к нашему формату и к этой таблице уже создать таблицу ссылок. В принципе, работать должно шустрее, но у нас не такие большие массивы данных, и я бы отнёс это к части повышения быстродействия.

Ладно, вынесу названия в отдельную таблицу. А потом уже будем смотреть что к чему. Пока что производительность остаётся на высоком уровне.
 
Сверху