Я работаю над проектом RoR для работы, и у меня возникли проблемы с принятием решения о дизайне таблиц моей реляционной базы данных.

Обратите внимание на следующее:

У меня есть модель продукта, каждый продукт имеет уникальное имя.

У меня также есть модель под названием Магазин, в каждом магазине много товаров.

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

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

Я имею в виду следующее:

  • Создайте таблицу продуктов, которая будет включать название продукта, а также столбцы для сохранения значений продукта по умолчанию (например, цена).

  • Создайте таблицу Shop, которая будет включать в себя все, что связано с магазином.

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

Теперь, когда я хочу получить цену для определенного заказа, я сначала проверю таблицу Product_To_Shop для соответствующего продукта и магазина и проверю поле «Цена» для соответствующей строки, и в случае, если она не установлена ​​на value (ноль), перейдите к таблице Product и выберите значение цены по умолчанию для соответствующего продукта.

Все это выглядит немного сложным для задачи, которая кажется немного более тривиальной.

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

0
Mikey S. 27 Дек 2011 в 01:10

1 ответ

Вы можете сделать следующее

  1. Создайте таблицу «Продукты», в которую будут включены данные о товарах (но не цены).
  2. Создайте таблицу Shops, в которую будут включены данные о магазинах.
  3. Создайте таблицу Prices, которая будет включать Product_id, Shop_id, Price.

Shop_id по умолчанию имеет значение null, которое будет указывать вашу цену по умолчанию.

Когда вам нужна цена, получите один соответствующий shop_id или isnull

0
Ma7dy 27 Дек 2011 в 03:39