使用多供应商市场处理订单

时间:2015-12-05 14:24:47

标签: database database-design e-commerce

我的计划是在我的多供应商电子商务网站上,订单将由供应商自己完成。但是,我不希望我的网站用户对来自相同/不同供应商的2个产品的2个订单感到沮丧。我想向他们提供添加到购物车选项,只进行一次结帐。

我的数据库设计技巧达不到标准,我不知道如何处理我的数据库中的这种情况。我现在有两张桌子

顺序

 Schema::create('order', function (Blueprint $table) {
            $table->increments('id');
            $table->string('order_number');
            $table->integer('customer_id');
            $table->integer('order_status'); // Does not make sense as if order has products from multiple vendors. There will be different status from each vendor
            $table->timestamps();
        });

订单明细

Schema::create('order_detail', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('order_id')->unsigned();
        $table->string('product_id')->unsigned();
        $table->integer('vendor_id')->unsigned();
        $table->tinyInteger('quantity')->unsiged();
        $table->string('sku');
        $table->integer('order_status_code');
        $table->timestamps();
    });

因此,如果客户在一个订单中购买多个商品。每个项目的order_detail表格中的行与其vendor_id相关联。让我们说一个供应商处理订单而另一个正在等待处理。我怎么能反映这是主order表?

由于

2 个答案:

答案 0 :(得分:2)

您需要将数据库拆分为更多表。考虑一下每个表需要知道的内容。

您创建一个将放置在您的市场网站上的订单。该订单将包含与客户相关的信息,也可能包含总计信息。创建单独的订单或“发票”,然后发送给供应商,将仅包含与该供应商有关的项目。供应商无需了解向其他供应商下的订单或发票。他们只需要知道他们需要完成的项目和将要获得的款项即可。

发票可以连接到物料,单位物料以及装运,以防将物料装在单独的包装箱中。基本上,您会了解需要了解的内容。仓库只需要知道要运送的物品,也要运送到哪里以及何时运送它。他们对付款细节一无所知。商店所有者将需要知道他们赚了多少钱,但不需要知道发货量。如果他们碰巧是同一个人,他们将获得两条信息,但信息不会在同一个地方。

从数据库创建对象时,首先要加载订单。然后,您将发票对象加载到属于该订单的数组中。每张发票将包含一个货运对象数组,其中包含要购买的实际物品对象数组。

--ORDERS TABLE--
--------------------------------------------------------------------------
ID | Customer ID | Shipping ID | Billing ID | Number | Created | Updated | Checkout | Payment | Token | Currency | Local | Invoices Total | Adj_Total | Total

--INVOICES TABLE--
--------------------------------------------------------------------------
ID | Order ID | Vendor ID | Number | Issued | Items Total | Adj_Total | Total | Coupon ID | Notes | State | Fulfilled

--ITEMS TABLE--
--------------------------------------------------------------------------
ID | Invoice ID | Variant ID | Product ID | Quantity | Unit Price | Unit Total | Adj_Total | Total  | Product Name | Variant Name

--UNITS TABLE--
--------------------------------------------------------------------------
ID | Item ID | Shipment ID | Adj_Total | Created | Updated

您仍然需要编写编码逻辑,以在结帐时显示客户1个订单。如果您要为每批货物分别收取运费,则他们还需要查看单独的货物,以防允许他们为每批货物选择不同的方法,例如UPS或Fedex。

免责声明:

我正在整理一个开源的多供应商数据库 您可能感兴趣的设计。太大,无法在此处发布 但您可以在Reddit上找到它。请随时访问和分享 您的想法和意见,以进一步改善其他人的设计。

https://www.reddit.com/r/Database/comments/f1d4fx/marketplace_database_design/

答案 1 :(得分:1)

为客户提供单一订单。对于供应商,他们必须得到一个“订单”。这是专门针对他们将要实现的产品。这意味着必须按订单中的每个订单项计算运费(和税)。没有任何其他方法可以做到这一点,因为您必须单独支付您的供应商。所以主要订单将参考供应商订单。跟踪运输履行应该是供应商订单的一部分,因为您需要监控不同供应商完成订单的速度和程度。

绝对检查亚马逊 - 从不同的商家那里完成订单 - 也就是说亚马逊或黄金没有实现 - 并且看看亚马逊如何在订单处理过程中向客户展示它在后续行动中。接下来注册成为亚马逊的卖家并审核所有文档。