Задать вопрос

Как правильно организовать структуру базы данных интернет-магазина, если товары из разных источников?

Всем доброго времени суток!
Очень прошу советов из опыта насчет правильной организации структуры базы данных.

Есть сеть магазинов в разных городах: Москва, Санкт-Петербург, Новосибирск, Екатеринбург.
Компания планирует расширяться и в других городах.

Моменты:
1. В каждом городе своя (полностью отдельная) база 1С в которой хранится информация о товарах.
2. Структура баз 1С хранения у всех одинаковая, поэтому функциональность импорта товаров в БД будет единой.
3. В каждой базе есть свои склады (разбросанные по городу) с разными остатками товаров.
4. Товары в большинстве одинаковые но есть и разные позиции (т.е., например, какие-то товары есть только в Москве). Соотношение примерно 70/30.
5. У товаров есть три типа цены: все, партнеры и оптовики.
6. Примерное количество товаров в базе: 10 000 - 15 000 шт.
7. Сайт будет на несколько городов и в зависимости от выбранного города, должны отображаться товары из определенной базы 1С. Если в городе еще нет филиала, то будут показываться товары из базы по-умолчанию (Москва).

Какие таблицы в БД я планирую создать:
product - название, описание, категория, фотографии
product_price - цена, тип цены (числовое обозначение пункта 5 выше)
warehouse - название склада (создаю в основном для того, чтобы получить id)
product_quantity - id склада, количество остатков

А теперь собственно сам вопрос: как мне организовать структуру для нескольких городов?
Сам метаюсь между двумя вариантами.

Вариант 1.
Создать таблицы по списку выше и в каждую добавить поле, например city - которое будет обозначать город из которого выгружена запись. В значении что-то вроде: msk, spb и т.д.

Вариант 2.
За основу взять, например, Московскую базу и для нее создать таблицы выше.
Для остальных городов дублировать таблицы с приставкой города.
spb_product, spb_product_price, spb_warehouse, spb_product_quantity и т.д.

DRY (Don't repeat yourself) и вроде второй вариант избыточен, но помимо основных данных, у товаров будет еще куча атрибутов для фильтров и поиска. Скорость выборки на первом месте.

И вот здесь основные сомнения: сделать выборку из 15 000 строк быстрее, чем из 60 000 (и будет больше) с WHERE city='spb'. На старте хотелось бы сделать правильно, чтобы при последующем развитии не упереться и переписываться все заново.

Может быть кто-то уже сталкивался с такой задачей или есть советы?
Заранее благодарен за любую помощь!
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
И вот здесь основные сомнения: сделать выборку из 15 000 строк быстрее, чем из 60 000 (и будет больше) с WHERE city='spb'. На старте хотелось бы сделать правильно, чтобы при последующем развитии не упереться и переписываться все заново.
Современные бд вообще с такими объемами смешными справляются достаточно легко, скорость может проседать в районе миллиона записей (утрированно, но где-то близко к истине), и там уже надо думать как это хитро индексировать/шардировать или тюнить железо/софт (естественно и тестовая машина должна быть какой-то адекватной конфигурации). По этому такая экономия на спичках по итогу выйдет боком. Собственно вам ничего особенно не стоит создать фейкером 15/60К записей со связями и прогнать эксплэйн на запрос, посмотреть чего в индексах не хватает, как быстро идет выборка... И WHERE city='spb' скорее всего вам аукнется, нужно связывать со справочной таблицей городов и соединять по айди-сити_айди, или через пивот, если у товара может быть больше одного города.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы