我有一个提供电子商务服务的网站,基本上允许该行业的卖家将他们的产品出售给客户。卖家选择他们想要销售的产品并设定价格。然后他们会放手。
在简化表格中,我的数据库中有以下相关表格,用于存储产品和订单信息:
Product_Info
--------------------
ID (autonumber)
name
...
Order_Head
--------------------
ID (autonumber)
CustomerID
...
Order_Line
--------------------
ID (autonumber)
OrderHeadID
ProductID
...
这适用于简化订单,客户可以选择任意数量的产品并将其添加到购物车中。但是,我现在面临的问题是添加卖家创建和管理的“套餐”,其中卖家可以将多个产品组合成一个单独的商品,并以低于单个商品一起成本的价格出售。例如,如果橙子价格为15美元,苹果价格为20美元,则包含2个橙子和1个苹果的包装可能只需35美元。
扭曲,以及让我现在陷入困境的那部分,是我非常希望包装能够包含其他包装。例如,卖家可以制作包含3个橙子的“什锦橙子”包装。然后他们可以制作一个包含2个苹果和1个“什锦橙子”的“什锦水果”包。
当我从产品表或包表中引用ID以及如何在order_line表中记录产品时,如何管理这一点让我感到困惑的是如何列出包中的产品productID可以指向产品或包。当然,这需要以有效的方式设计,因此我们不会不必要地对数据库服务器征税。
我主要是一名网络开发人员,以前在电子商务方面做得不多。任何人都可以提供一些适当的表和表修改方法以应用于数据库吗?我不知道为什么,因为它似乎不应该那么复杂,但这个让我陷入困境。
作为参考,我使用的是MySQL 5.1,连接到ColdFusion MX 7(很快就是9)。
感谢您的回复。我会花点时间进一步思考它们。与此同时,我想澄清订单处理的工作原理,因为它似乎比我原先假设的更有意义。
我的产品类似于Shutterfly。摄影师张贴照片,客户可以购买照片。摄影师需要工具来设置所有定价,并且如果来自专业拍摄,通常会提供套餐。实现由我的产品自动提交订单的实验室完成,但他们不了解定价,包装等。
摄影师还可以选择运行特价商品为客户提供x%折扣或BOGO优惠,但我可以单独处理。现在我更关心的是一种有效而简单的方法来存储摄影师定义的包,客户在购物时的每个产品的图像选择(当前存储在order_line镜像表中),以及最终的订单细节,这样他们就可以快速轻松地查询显示和报告。
答案 0 :(得分:2)
创建一个附加表,列出每个包的成员项以及包中包含的数量。
表Package_Items
CREATE TABLE Package_Items (
package_id INT NOT NULL
item_id INT NOT NULL,
item_quantity INT NOT NULL DEFAULT 1,
FOREIGN KEY (package_id) REFERENCES Product_Info (ID),
FOREIGN KEY (item_id) REFERENCES Product_Info (ID)
PRIMARY KEY (package_id, item_id)
);
package_id
列引用Product_Info
中作为主要包项的行。 item_id
指的是包成员的其他项目。可以有多个package_id, item_id
组合。
使用此方法,您可以在Product_Info
中创建代表包的新行。要将所有项添加到包中,只需在Package_Items
中添加相应的行即可。如果添加到Package_Items
的行也发生在包产品本身上,则无需执行额外的工作。
请注意不要将包添加到自身。
答案 1 :(得分:0)
这是一套棘手的要求,特别是因为您还没有告诉我们有关履行情况,或任何其他折扣计划,或当客户退回包裹中的单个商品以获得退款时会发生什么......
迈克尔的设计是存储产品分层性质的好方法。
接下来的问题是“你在哪里存储包裹的价格” - 因为它不是所有产品的总和。我建议将价格存储在“package_items”表中。
您对“order_line”表做了什么?您有三种选择:
如果履行订单的人知道包裹,您可以选择选项1.然而,客户将他们的运输单与他们收到的产品进行比较可能会感到困惑。
如果您想显示每个订单项,但保留“套餐价格”,则选项二允许您显示订单项;如果客户想要退货,您必须以某种离线方式计算出该商品的价值。
大多数超市收费都使用选项3 - 它也是一种很好的方式,可以向顾客展示他们只是因为订单与套餐相匹配而获得“奖励”折扣的商品。
如果订单商品无法同时发货,您必须决定在发货单上打印什么 - 这是背面的巨大痛苦,并且经常影响条款和条件,和(在欧洲)税收。
如果您打算提供其他类型的折扣(例如“花x,免费获得”或“超过x的订单10%折扣”),您需要明确定义,因为折扣的方式可以复合彼此往往会扰乱零售商 - 这就是为什么他们通常在包裹交易中提供“最便宜的免费物品”。