Создание архитектуры на основе реляционной DB MySql

И так, нужен совет в создании БД в которой будут хранится около 1.5 миллиона товаров, но вся сложность в том что у конкретного товара может быть к примеру 30 поставщиков, и для каждого поставщика надо хранить поля такие как: количество, цена, описание, и возможно еще какие то. То есть к примеру если все это хранить в 1 таблице то было бы +30 каждого поля от поставщика(price_provider_1, price_provider_2...price_provider_30, description_1....description_30 и тд.)

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

Я пришел к такой реализации:

  1. создаем таблицу product, в ней храним общие поля такие как title, attr_id, category_id, manufacturer_id, provider_id, code, ...
  2. создаем таблицу attributes в ней храним поля поставщиков

Процесс импорта товаров(импорт включает в себя добавление новых или обновление количества/цены для существующих):

  1. Если новый товар то записываем сначала данные в таблицу attributes, затем основные поля в product включая attr_id новой записи с таблицы attributes, проверка на существование товара идет по полям provider_id и code provider_id - уникальный ID поставщика, тип int code - код изготовителя товара, этот код будет повторятся и у других поставщиков, тип varchar
  2. Если товар существует, то по attr_id обновляем таблицу attributes

Процесс выборки подходящего товара

Вариант 1: Связываем эти 2 таблицы по полю code, так как он есть в обеих таблицах и тогда для одной записи в products получу все 30 вариантов от поставщиков и выберу все необходимое, но для этого надо будет сначала сгруппировать таблицу products по code что бы дубликатов не было

Вариант 2: без группировки, связать по полю attr_id и получить все вмести с дублями а потом отдельно отсеять ненужное. При любом из подходов выборки подозреваю что нельзя будет работать напрямую с этими таблицами для отображения товаров, из за того что это будет возможно медленно, и придется делать еще одну таблицу что бы в неё импортировать уже отобранные товары с этих таблиц. Выборка включает в себя пагинацию, поиск по товарам, фильтрацию по цене и количеству

Пару заметок:

  1. Реализация будет на Laravel
  2. Не допускается подключение других не реляционных БД, только MySQL

Меня не покидает чувство того что мой подход не правильный и принесет в будущем много головной боли, поэтому буду рад любому совету по том как это лучше реализовать, что бы работало максимально быстро силами MySQL + Laravel.


Ответы (0 шт):