Какой вариант лучше при проектировании базы данных отличающихся магазинов?
Всем доброго времени суток!
Возникла, с одной стороны, тривиальная, а с другой не очень задача. Не могу определиться с выбором, так как никакой в полной мере не устраивает.
Имеется сущность "Магазин", в которой хранится основная информация о магазине (тип, название, ...). Суть в том, что магазины бывают разные и товары для каждого типа магазина хранятся в отдельных таблицах. Например, для магазина с типом "Автосервис", товарами являются - услуги. А для магазина с продовольствием, товарами являются - игрушки.
То есть имеем сущность "Магазин" и другие таблицы, в которых хранятся "товары" для этого магазина.
У каждого магазина на каждый товар могу быть ценники. Вот вопрос как раз в таблицах, для хранения таких ценников. Нужно организовать доступ к ценникам, конкретного магазина.
Мои варианты такие: Вариант 1:
Каждой сущности из "товаров" добавляется поле: price, shopType.
Для каждого магазина создаются таблицы типа: shopId, productId, price. По дефолту они пустые и для доступа идет JOIN на product. Если в price пусто, то берем цену из таблицы с "Продуктом". Если же цена меняется, то эти таблицы заполняются.
Этот подход кажется более логичным, но создает довольно много таблиц, для каждого типа магазина.
Вариант 2:
Создается абстрактная таблица Product, в которой храним множество FK'шек: shopId, price, serviceProductId?, groceryProductId?. .... Создаем CONSTRAINT на то, что в одной записи может быть только один FK на таблицу с конкретным продуктом.
Тогда получается, что все наши ценники хранятся в одной таблице, для разных магазинов. Для PK в этой таблице сделать какой-нибудь serial.
Этот подход не очень нравится из-за того, что придется строить довольно большие запросы с JOIN'ами.
Может у кого-то есть идеи получше? А то что-то я совсем в тупике) Заранее благодарен