应用程序有订单,一个订单可以有项目。 为此,我们拥有如下数据库表。
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包含所有项目数据以及与订单的关系。由于可以接受任何商品的订单,因此我们没有固定的商品清单。
答案 0 :(得分:0)
您要处理的是物品束,例如,束是一个网球拍套装,它由三个物品组成:两个球拍和一个球。您已经考虑了三种在数据库中建模的方法。我正在提出第四种方法。
到目前为止,您拥有什么:
这是项目表的外观:
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 | amount ---------------+-----------------+------- 3 | 1 | 2 3 | 2 | 1