Как по-разному хранить товар, и товар может иметь подпункт? - PullRequest
2 голосов
/ 19 марта 2019

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

Table 1 - T_ORDER(pk_order_id, order_no, date)
Table 2 - T_ORDER_ITEM (pk_order_itemid, fk_order_id, ean, quantity, price)

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

В основном комплектация - это виртуальная группа из одного или нескольких реальных предметов, но она может иметь свойство, такое как реальный предмет, например, количество - так что пользователь может разместить заказ более чем на один такой комплект, например, для идентификации, цене, он может иметьцена, включая весь реальный предмет в комплектеи каковы преимущества и недостатки одного перед другим, и какие моменты я должен учитывать при выборе одного из них?

Option 1 - New tables for bundle and bundle item
           In addition of above two tables , we add two new tables like
           T_ORDER_BUNDLE(pk_order_bundle_id, fk_order_id, ean, quantity, price
           T_ORDER_BUNDLE_ITEM (pk_order_bundle_itemid, fk_order_bundle_id, ean, quantity, price) 

Option 2 - New table to store bundle and use existing table for item
           T_ORDER_BUNDLE(pk_order_bundle_id, fk_order_id, ean, quantity, price
           Just add new column like fk_order_bundle_id in T_ORDER_ITEM table.

Option 3 - New table to store sub items of an item 
           Bundle item can be stored in existing T_ORDER_ITEM table.
           New table - T_ORDER_ITEM_SUBITEM(pk_order_item_subitem, fk_order_itemid, ean, quantity, price)

Примечание: - У нас нет мастер-таблицы для предметов.Таблица T_ORDER_ITEM содержит все данные товара и отношение к заказу.В качестве заказа можно принять любой товар, и у нас нет фиксированного списка товаров для продажи.

1 Ответ

0 голосов
/ 20 марта 2019

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

Что у вас есть:

  • предметов (item_id, ean, description, list_price)
  • заказов (идентификатор заказа, номер заказа, дата)
  • order_item (order_item_id, order_id, item_id, количество, цена)

Вот как может выглядеть таблица предметов:

item_id | ean     | description      | list_price
--------+---------+------------------+-----------
1       | 1234567 | tennis racket    |      50.00
2       | 2345678 | tennis ball      |       4.00

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

Сначала давайте добавим элемент пакета в таблицу элементов:

item_id | ean     | description      | list_price
--------+---------+------------------+-----------
1       | 1234567 | tennis racket    |      50.00
2       | 2345678 | tennis ball      |       4.00
3       | 3456789 | tennis set       |      98.00

Цена набора 98 дешевле, чем сумма содержимого набора 50 + 50 + 4 = 104, что часто является причиной для покупки набора.

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

  • связок (bundle_item_id, bundled_item_id, количество)

А теперь давайте заполним его нашими данными:

bundle_item_id | bundled_item_id | amount
---------------+-----------------+-------
3              | 1               |      2
3              | 2               |      1
...